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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top