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 grep

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


Anmelden zum Antworten