Come posso isolare il testo quotato da un file a una variabile di shell?
-
07-09-2020 - |
Domanda
Come posso isolare il testo quotato da un file a una variabile di shell?
anche: come posso ignorare le linee che iniziano con '#'
?
Diciamo che ho il file di testo
8723 "full name" "more data here" #5002 "another name" "bla bla bla" 7129 "single" blablabla 3910 noquote "bla bla bla".
e voglio scrivere uno script che esegue
#!/bin/sh
myscript <KEY> "<FULL NAME>" "<MORE DATA>"
.
per ogni riga nel file di testo.
Se lo rende più facile, puoi assumere fullname e moredata nel file di testo sono sempre racchiusi in citazioni, anche quando sono composti da una singola parola.
.
Ho provato il semplice
#!/bin/sh
while read key name extra
do
echo "myscript $key \"$name\" -- \"$extra\""
#myscript $key "$name" "$extra"
done < list.txt
.
Ma non raggruppano il valore all'interno delle citazioni in una singola variabile di shell.
L'output è
myscript 8723 ""full" -- "name" "more data here"" myscript #5002 ""another" -- "name" "bla bla bla"" myscript 7129 ""single"" -- "blablabla" myscript 3910 "noquote" -- ""bla bla bla"".
Invece, mi piacerebbe ottenere
myscript 8723 "full name" -- "more data here" myscript 7129 "single" -- "blablabla" myscript 3910 "noquote" -- "bla bla bla".
certo che posso aggiungere myscript
ad ogni riga del file di testo originale e creare quel file uno script o scrivere un programma C
per farlo ...
Soluzione
#!/bin/sh
while read key name extra
do
eval myscript $key $name $extra
done <(grep -v "^#" list.txt)
. Altri suggerimenti
sed -e '/^[^#]/s/^/myscript /' list.txt
.
Modifica: per eseguirlo:
sed -e '/^[^#]/s/^/myscript /' list.txt | bash
.