переменная bash LATLNG содержит значение широты и долготы в скобках, например
(53.3096,-6.28396)
Я хочу разобрать их в переменные с именами LAT и LON, которые я пытаюсь сделать с помощью sed, так
LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG")
LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG")
Однако я получаю следующую ошибку:
sed: can't read (53.3096,-6.28396): No such file or directory
bash
переменную.Ответы:
Это можно решить с помощью чистого синтаксиса оболочки. Требуется переменная temp из-за круглых скобок:
Кроме того, вы можете сделать это за один раз, поиграв с
IFS
помощьюread
встроенного:источник
#!/bin/bash
Ответ SiegeX лучше в данном конкретном случае, но вы также должны знать, как передавать произвольный текст
sed
.sed
ожидает имена файлов в качестве второго, третьего и т. д. параметров, и если он не находит никаких имен файлов, он считывает данные из стандартного ввода. Поэтому, если у вас есть текст, который вы хотите обработать, которого нет в файле, вы должны передать его по конвейеруsed
. Самый простой способ заключается в следующем:Таким образом, ваш пример станет:
Альтернативные (лучше, но более смутные) методы
Если вы думаете, что есть шанс
$LATLNG
начать с тире, или если вы хотите быть педантичным, вы должны использоватьprintf
вместоecho
:Или «здесь документ», но это может быть немного неловко с конструкцией, которую вы используете:
Или, если вы используете
bash
и не беспокоитесь о переносимости, вы можете использовать «здесь строка»:источник
Вот решение, которое будет работать в любой оболочке POSIX:
Вот еще одно не менее переносимое решение, которое анализирует используемый синтаксис.
источник
источник
set -- ...
Очень вероятно, что первый персонаж - это-
.