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 ...

È stato utile?

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top