Frage zu grep



  • Wieso geht das:

    grep -r -i Suchwort *
    

    aber nicht das hier:

    grep -r -i Suchwort *.txt
    

    Wie kann ich mit grep Dateien rekursiv durchsuchen und die Dateien dennoch auf die Dateien begrenzen, welche auf *.txt enden?



  • -R?



  • Schau doch einfach mal in die manpage:

    man grep schrieb:

    -R, -r, --recursive
    Read all files under each directory, recursively; this is equiv-
    alent to the -d recurse option.

    --include=PATTERN
    Recurse in directories only searching file matching PATTERN.

    --exclude=PATTERN
    Recurse in directories skip file matching PATTERN.

    -r liest alle Files, wenn du nur nach bestimmten suchen willst, kannst du --include benutzen. Und sonst gibt es ja immer noch find -exec.



  • Vergessen3 schrieb:

    -R?

    Das ist doch das gleiche wie -r

    -R, -r, --recursive

    Das mit --include=Patterns sollte es allerdings tun.

    Ist trotzdem doof, daß es die Konvention "*.txt" nicht kennt.



  • Grep-Problem schrieb:

    Ist trotzdem doof, daß es die Konvention "*.txt" nicht kennt.

    du suchst ja auch egrep.



  • Grep-Problem schrieb:

    Wieso geht das:

    grep -r -i Suchwort *
    

    aber nicht das hier:

    grep -r -i Suchwort *.txt
    

    Wie kann ich mit grep Dateien rekursiv durchsuchen und die Dateien dennoch auf die Dateien begrenzen, welche auf *.txt enden?

    In bash etc. wird *.txt expandiert bevor grep überhaupt aufgerufen wird. Wenn du einen Ausdruck mit * übergeben möchtest, musst du einfache Anführungsstriche benutzen. Beispiel:

    grep -Inri '*.txt' .
    

    Das sucht rekursiv nach allen Dateien, die exakt den String '*.txt' beinhalten, ohne den Case zu beachten.

    mit -E (oder egrep) werden reguläre Ausdrücke interpretiert:

    grep -E 'hallo.*welt' *
    

    Ein nützliches Tool ist auch ack-grep. http://betterthangrep.com/



  • Grep-Problem schrieb:

    Wieso geht das:

    grep -r -i Suchwort *
    

    aber nicht das hier:

    grep -r -i Suchwort *.txt
    

    Wie kann ich mit grep Dateien rekursiv durchsuchen und die Dateien dennoch auf die Dateien begrenzen, welche auf *.txt enden?

    Hast du ein Glück, dass ich heute meinen guten Tag habe und dich aus den Klauen der Unwissenden befreien kann 🙂

    Beim ersten Aufruf übergibst du alle Dateien und Ordner des aktuellen Verzeichnisses an grep und somit greift -r für die Ordner, die du angegeben hast. Bei zweiterem hast du ausschließlich Dateien angegeben und die sind halt keine Ordner 🙂

    Was du willst ist:

    shopt -s globstar
    grep -ri Suchwort **/*.txt
    

Anmelden zum Antworten