Frage zu grep
-
Hi,
ich muss text-files auswerten, möchte dazu 'grep' verwenden, nun folgendes Problem:
grep -e 'Directory index' logfile.txt
funktioniert wunderbar, wenn ich es direkt in der bash-shell eingebe.
Nun übergebe ich dem script allerdings Dateinamen und Suchstring per Parameter bzw. Variable, hier der code auszugsweise:# Filename ist $* DIR="Directory index" grep -e '$DIR' $* >>output.txt
Hier läuft grep durch, aber gibt nicht die entsprechenden Zeilen aus. Das liegt sicherlich daran, dass der string-Wert der Variable wohl irgendwie inkorrekt ankommt.
Kann mir da jemand einen Hinweis geben ?[EDIT]:
Ich glaube ich habe es:grep -s "$DIR" $* >>output.txt
Scheint zu funktionieren, kann mir das jemand bestätigen, nicht dass es doch irgendwelche Fälle gibt wo es nicht funktioniert...
Gruss,
Lalas
-
Mit den Single Quotes verhinderst Du, dass die Variable evaluiert wird und greppst nach dem Literal '$DIR', nicht nach dem Inhalt der Variable $DIR.
Du möchtest Double Quotes, also
grep -e "DIR" $* >>output.txt
Aber wofür brauchst Du das "-e" genau?
-
ohne -e würde es nicht gehen wenn $DIR mit - anfängt
-
Also warum -e kann ich garnict genau sagen, habe soviele Varianten ausprobiert und die hatte ich irgendwo im Internet gefunden.
-e unterdrückt halt die Fehlerausgabe von grepAber anscheinend funktioniert es mit:
grep -s "$DIR" $* >>output.txt
Wenn also $DIR = "Dies ist ein Test", dann sollen alle Zeilen ausgegeben werden wo GENAU dieser string steht.
Zeilen mit z.B. "Dies ist ein Apfel" sollen nicht ausgegeben werden.Aber ich denke die obige Variante sollte richtig sein, zumindest funktionieren alle Kombinationen die ich bislang getestet habe.
Gruss,
Lalas
-
DrGreenthumb schrieb:
ohne -e würde es nicht gehen wenn $DIR mit - anfängt
Good point.