Estaba tratando de extraer cadenas de la siguiente forma:

[["abc"]] --> abc

Entonces escribí echo "[[\"abc\"]]" | sed -e 's/\[\[\"//g' | sed -e 's/\"\]\]//g'

Y funciona bien pero se ve extremadamente feo. ¿Estoy bastante seguro de que debería haber una solución más ordenada para un caso tan simple?

¿Puede aconsejar alguna mejora sed o awk para eso?

1
St.Antario 7 sep. 2018 a las 22:30

4 respuestas

La mejor respuesta

Si solo está buscando lo que está entre comillas dobles, intente esto

echo '[["abc"]]' | awk -F\" '{print $2}'

Espero que esto ayude

2
Lewis M 7 sep. 2018 a las 19:44

Puede usar un solo reemplazo con un grupo de captura:

echo '[["abc"]]' | sed 's/\[\["\([^"]*\)"\]\]/\1/g'

Tampoco necesita escapar " en una expresión regular.

3
Barmar 7 sep. 2018 a las 19:44

Simplemente elimine los caracteres no deseados

$ echo "[[\"abc\"]]" | tr -d '[]"'
abc
2
karakfa 7 sep. 2018 a las 19:48

Para sed, una opción para hacer que su comando sea un poco más breve es utilizar un grupo de captura junto con una referencia inversa:

echo "[[\"abc\"]]" | sed -e 's/\[\["\(.*\)"\]\]/\1/g'
> abc
2
Travis Clarke 13 sep. 2018 a las 00:41