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