Pregunta

¿Cómo aíslo el texto citado de un archivo en una variable de shell?
También:¿Cómo ignoro las líneas que comienzan con? '#'?

Digamos que tengo el archivo de texto.

8723 "full name" "more data here"
#5002 "another name" "bla bla bla"
7129 "single" blablabla
3910 noquote "bla bla bla"

y quiero escribir un script que se ejecute

#!/bin/sh
myscript <KEY> "<FULL NAME>" "<MORE DATA>"

para cada línea del archivo de texto.
Si lo hace más fácil, puede asumir que NOMBRE COMPLETO y MÁS DATOS en el archivo de texto siempre están entre comillas, incluso cuando están compuestos por una sola palabra.


Probé lo simple

#!/bin/sh
while read key name extra
do
    echo "myscript $key \"$name\" -- \"$extra\""
    #myscript $key "$name" "$extra"
done < list.txt

pero no agrupa el valor entre comillas en una única variable de shell.
La salida es

myscript 8723 ""full" -- "name" "more data here""
myscript #5002 ""another" -- "name" "bla bla bla""
myscript 7129 ""single"" -- "blablabla"
myscript 3910 "noquote" -- ""bla bla bla""

En cambio, me gustaría obtener

myscript 8723 "full name" -- "more data here"
myscript 7129 "single" -- "blablabla"
myscript 3910 "noquote" -- "bla bla bla"

Por supuesto que puedo agregar myscript a cada línea del archivo de texto original y convertir ese archivo en un script o escribir un C programa para hacer eso...

¿Fue útil?

Solución

#!/bin/sh
while read key name extra
do
    eval myscript $key $name $extra
done <(grep -v "^#" list.txt)

Otros consejos

sed -e '/^[^#]/s/^/myscript /' list.txt

EDITAR:Para ejecutarlo:

sed -e '/^[^#]/s/^/myscript /' list.txt | bash
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top