PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dateiinhalt suchen mit "grep"


Gast
2011-07-11, 14:45:28
Hallo ihr!

Ich habe einen Ordner mit mehreren LaTeX-Dateien. Nun würde ich diese Dateien gerne nach einem bestimmten Wort durchsuchen lassen, so dass mir alle Dateien aufgelistet werden, in denen es vorkommt.
Wie funzt das?

Baalzamon
2011-07-11, 14:50:54
Im Verzeichnis:
grep <Suchmuster> *

Verzeichnisübergreifend musst du dir da selber ein kleines Skript basteln

mekakic
2011-07-11, 16:28:19
gar nicht mal soviel Script für Verzeichnisübergreifend:
grep "Suchtext" $(find -name '*.tex')

petersenk
2011-07-11, 16:56:41
ach komm, dazu ist doch kein find oder sonst was gepipelinetes nötig. Mach ma man grep und schau, was sich hinter -R verbirgt. ;)

Davon abgesehen, ist es mir allerdings doch eher schleierhaft, warum man sowas in einem Forum erst noch erfragen müsste. Als ob google nix über grep wüsste - vom Handbuch mal ganz abgesehen... :/

Faules Pack. :D

Baalzamon
2011-07-11, 17:42:18
ach komm, dazu ist doch kein find oder sonst was gepipelinetes nötig. Mach ma man grep und schau, was sich hinter -R verbirgt. ;)

Aber nicht beim Solaris grep, da fehlt diese wunderbare Funktion. :P

:D ;)

mekakic
2011-07-11, 17:44:30
ach komm, dazu ist doch kein find oder sonst was gepipelinetes nötig. Mach ma man grep und schau, was sich hinter -R verbirgt. ;)

Davon abgesehen, ist es mir allerdings doch eher schleierhaft, warum man sowas in einem Forum erst noch erfragen müsste. Als ob google nix über grep wüsste - vom Handbuch mal ganz abgesehen... :/

Faules Pack. :D
Das funktioniert aber nicht gleich. Obiges geht mittels find in alle Verzeichnis. Grep geht nur in die Verzeichnisse, wenn sie einen Match auf das File-Pattern liefern.

Also grep -r "Suchtext" *.tex wird im Root Verzeichnis auf alle *.tex angewendet und auf alle Verzeichnisse mit "*.tex" (z.B. "dir.tex") aber wenn ein Verzeichnis anders heisst (z.B. "dirnontex" ) wird das nicht durchsucht.

Hab mich immer gefragt, was diese Implementation von grep soll aber mit der find Lösung oben klappt das so wie man es meistens will.

petersenk
2011-07-11, 18:28:04
echt jetzt?
Ha.

Danke für die Erläuterung jedenfalls. :D

sei laut
2011-07-11, 18:33:40
Das funktioniert aber nicht gleich. Obiges geht mittels find in alle Verzeichnis. Grep geht nur in die Verzeichnisse, wenn sie einen Match auf das File-Pattern liefern.
Von welchem OS reden wir nun? Bei Debian grep ist das definitiv nicht so. -R geht in alle Verzeichnisse, auch wenn das Pattern nicht im Ordnernamen enthalten ist.

Sonst wäre die -R Option bei grep in der Tat fürn Arsch - und würde der normalen -R Option, die man kennt und erwartet, zuwider laufen.

Gast
2011-07-11, 21:39:26
Da außerdem der Dateiname gefragt ist, ist noch der Parameter "-l" (kleines L) zu erwähnen.

Bzgl. der find-Lösung: grep -rl <Pattern> * lässt sich schneller tippen, man hat aber keine Eingrenzung auf die Endung ".tex". (Was sich wiederum über eine Pipe erledigen ließe).
Wenn schon "find" könnte man ja auch sowas basteln:
find . -name "*.tex" -exec grep <Pattern> {}
oder so... :)

Ich denke die Fragestellung ist mehr als beantwortet. :)

Gast
2011-07-11, 21:41:44
gar nicht mal soviel Script für Verzeichnisübergreifend:
grep "Suchtext" $(find -name '*.tex')
Oh sorry, dass ich deswegen nochmal störe, aber: die $(...)-Syntax ist nicht portabel!
Daher lieber Backticks angewöhnen ( `` ).

mekakic
2011-07-12, 09:55:40
Von welchem OS reden wir nun? Bei Debian grep ist das definitiv nicht so. -R geht in alle Verzeichnisse, auch wenn das Pattern nicht im Ordnernamen enthalten ist.

Sonst wäre die -R Option bei grep in der Tat fürn Arsch - und würde der normalen -R Option, die man kennt und erwartet, zuwider laufen.Also ich wundere mich da seit Jahren drüber und habe es gerade nochmal auf Ubuntu 10.4 LTS ausprobiert. Der geht nicht in Verzeichnisse, wenn es keinen Match aufs File-Pattern gibt. Funktioniert nur mit * (eben ohne .* dann).

Ich hab es eigentlich nur bei Debian (oder Debian-Basis) ausprobiert in den letzten Jahren, von einer anderen Distr-Basis kann ich da nicht berichten.

sei laut+
2011-07-12, 13:43:22
Ups, stimmt. Bei mir kommts so selten vor, dass ich zusätzlich nach Dateitypen filtern muss. :redface:

Darkstar
2011-07-12, 20:19:18
Wenn schon "find" könnte man ja auch sowas basteln:
find . -name "*.tex" -exec grep <Pattern> {}
oder so... :)So:find . -name '*.tex' -exec grep <Pattern> {} \; -print