Die Bash-Variable LATLNG enthält einen Breiten- und Längengrad in eckigen Klammern
(53.3096,-6.28396)
Ich möchte diese in eine Variable mit dem Namen LAT und LON zerlegen, was ich mit sed so versuche
LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG")
LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG")
Ich erhalte jedoch den folgenden Fehler:
sed: can't read (53.3096,-6.28396): No such file or directory
bash
Variable einfügen.Antworten:
Dies kann durch reine Shell-Syntax gelöst werden. Aufgrund der Klammern (Klammern) ist jedoch eine temporäre Variable erforderlich:
Alternativ können Sie es in einem Zug tun, indem Sie mit
IFS
demread
eingebauten Code spielen und ihn verwenden :quelle
#!/bin/bash
Die Antwort von SiegeX ist in diesem speziellen Fall besser, Sie sollten jedoch auch wissen, wie Sie beliebigen Text übergeben
sed
.sed
erwartet Dateinamen als zweiten, dritten usw. Parameter, und wenn keine Dateinamen gefunden werden, wird von der Standardeingabe gelesen. Wenn Sie also Text haben, den Sie verarbeiten möchten, der nicht in einer Datei enthalten ist, müssen Sie ihn weiterleitensed
. Der einfachste Weg ist dieser:So würde Ihr Beispiel werden:
Alternative (bessere, aber obskurere) Methoden
Wenn Sie glauben, dass eine Chance besteht,
$LATLNG
die mit einem Bindestrich beginnen könnte, oder wenn Sie pedantisch sein möchten, sollten Sieprintf
anstelle von Folgendes verwendenecho
:Oder ein "hier Dokument", aber das kann mit dem Konstrukt, das Sie verwenden, etwas umständlich sein:
Wenn Sie
bash
Portabilität nicht befürchten, können Sie auch eine "Here-Zeichenfolge" verwenden:quelle
Hier ist eine Lösung, die in jeder POSIX-Shell funktioniert:
Hier ist eine weitere gleichermaßen portable Lösung, die die verwendete spezifische Syntax analysiert.
quelle
quelle
set -- ...
Es besteht eine sehr gute Chance, dass der erste Charakter a ist-
.