variável bash LATLNG contém um valor de latitude e longitude entre parênteses como
(53.3096,-6.28396)
Eu quero analisá-los em uma variável chamada LAT e LON, que estou tentando fazer via sed assim
LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG")
LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG")
No entanto, eu recebo o seguinte erro:
sed: can't read (53.3096,-6.28396): No such file or directory
bash
variável.Respostas:
Isso pode ser resolvido através da sintaxe pura do shell. Requer uma variável temporária devido aos parênteses (colchetes), embora:
Como alternativa, você pode fazê-lo de uma só vez, brincando
IFS
e usando oread
builtin:fonte
#!/bin/bash
A resposta do SiegeX é melhor para este caso em particular, mas você também deve saber como passar texto arbitrário
sed
.sed
espera nomes de arquivos como seu segundo, terceiro, etc. parâmetros e, se não encontrar nenhum nome de arquivo, ele lê sua entrada padrão. Portanto, se você tiver um texto que deseja processar que não esteja em um arquivo, precisará canalizá-losed
. A maneira mais direta é esta:Portanto, seu exemplo se tornaria:
Métodos alternativos (melhores, porém mais obscuros)
Se você acha que há alguma chance de
$LATLNG
começar com um traço, ou se você quer ser pedante, useprintf
vez deecho
:Ou um "documento aqui", mas isso pode ser um pouco estranho com a construção que você está usando:
Ou, se você estiver usando
bash
e não estiver preocupado com a portabilidade, poderá usar uma "string aqui":fonte
Aqui está uma solução que funcionará em qualquer shell POSIX:
Aqui está outra solução igualmente portátil que analisa a sintaxe específica usada.
fonte
fonte
set -- ...
Há uma chance muito boa de o primeiro personagem ser-
.