Wie isoliere ich zitierten Text aus einer Datei in einer Shell-Variablen?
-
07-09-2020 - |
Frage
Wie isoliere ich zitierten Text aus einer Datei in einer Shell-Variablen?
Auch:Wie ignoriere ich Zeilen, die mit beginnen? '#'
?
Nehmen wir an, ich habe die Textdatei
8723 "full name" "more data here" #5002 "another name" "bla bla bla" 7129 "single" blablabla 3910 noquote "bla bla bla"
und ich möchte ein Skript schreiben, das ausgeführt wird
#!/bin/sh
myscript <KEY> "<FULL NAME>" "<MORE DATA>"
für jede Zeile in der Textdatei.
Zur Vereinfachung können Sie davon ausgehen, dass FULLNAME und MOREDATA in der Textdatei immer in Anführungszeichen stehen, auch wenn sie aus einem einzelnen Wort bestehen.
Ich habe es mit dem Einfachen versucht
#!/bin/sh
while read key name extra
do
echo "myscript $key \"$name\" -- \"$extra\""
#myscript $key "$name" "$extra"
done < list.txt
Der Wert wird jedoch nicht in Anführungszeichen in einer einzelnen Shell-Variablen gruppiert.
Die Ausgabe ist
myscript 8723 ""full" -- "name" "more data here"" myscript #5002 ""another" -- "name" "bla bla bla"" myscript 7129 ""single"" -- "blablabla" myscript 3910 "noquote" -- ""bla bla bla""
Stattdessen möchte ich erhalten
myscript 8723 "full name" -- "more data here" myscript 7129 "single" -- "blablabla" myscript 3910 "noquote" -- "bla bla bla"
Natürlich kann ich hinzufügen myscript
in jede Zeile der ursprünglichen Textdatei und machen Sie aus dieser Datei ein Skript oder schreiben Sie ein C
Programm, um das zu tun ...
Lösung
#!/bin/sh
while read key name extra
do
eval myscript $key $name $extra
done <(grep -v "^#" list.txt)
Andere Tipps
sed -e '/^[^#]/s/^/myscript /' list.txt
BEARBEITEN:Um es auszuführen:
sed -e '/^[^#]/s/^/myscript /' list.txt | bash