La variable bash LATLNG contiene un valor de latitud y longitud entre paréntesis
(53.3096,-6.28396)
Quiero analizar estos en una variable llamada LAT y LON que estoy tratando de hacer a través de sed así
LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG")
LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG")
Sin embargo, me sale el siguiente error:
sed: can't read (53.3096,-6.28396): No such file or directory
bash
variable.Respuestas:
Esto se puede resolver a través de la sintaxis de shell puro. Sin embargo, requiere una variable temporal debido a los paréntesis (paréntesis):
Alternativamente, puedes hacerlo de una vez jugando
IFS
y usando elread
builtin:fuente
#!/bin/bash
La respuesta de SiegeX es mejor para este caso particular, pero también debe saber cómo pasar texto arbitrario
sed
.sed
espera nombres de archivo como su segundo, tercer, etc. parámetros, y si no encuentra ningún nombre de archivo, lee de su entrada estándar. Entonces, si tiene texto que desea procesar que no está en un archivo, debe canalizarlosed
. La forma más directa es esta:Entonces su ejemplo sería:
Métodos alternativos (mejores pero más oscuros)
Si crees que hay alguna posibilidad de que
$LATLNG
comience con un guión, o si quieres ser pedante, debes usar enprintf
lugar deecho
:O un "documento aquí", pero eso puede ser un poco incómodo con la construcción que está utilizando:
O si está usando
bash
y no le preocupa la portabilidad, puede usar una "cadena aquí":fuente
Aquí hay una solución que funcionará en cualquier shell POSIX:
Aquí hay otra solución igualmente portátil que analiza la sintaxis específica utilizada.
fuente
fuente
set -- ...
Hay una muy buena posibilidad de que el primer personaje sea un-
.