2013-03-25 12 views
166

Wie grep eine Zeichenfolge oder ein Text in einem Verzeichnis und alle seine Unterverzeichnisse in LINUX ??Wie grep eine Zeichenfolge in einem Verzeichnis und alle Unterverzeichnisse der Dateien in LINUX?

+1

Wirst du ein Feedback zu den Problemen geben, die du mit 'grep -r' oder' grep -R 'gemacht hast? Hast du die Manpage für 'Grep' auf deinem Rechner überprüft? Haben Sie daran gedacht, die Regex (Zeichenfolge oder Text) in einfache Anführungszeichen zu setzen, wenn sie Metazeichen enthält? –

Antwort

326

Wenn Ihr grep -R unterstützt, tun:

grep -R 'string' dir/ 

Wenn nicht, dann verwenden find:

find dir/ -type f -exec grep -H 'string' {} + 
+3

Können Sie auch erklären, wie die 2. Antwort funktioniert? – tranquil

+1

Suchen Sie mit 'find' im Verzeichnis' dir/'nach regulären Dateien und führen Sie' grep -H 'string' in jeder dieser Dateien aus. – markzz

+0

Siehe Antwort unten. Wenn "-R" nicht funktioniert, versuche auch '-r'. –

38
grep -r -e string directory 

-r für rekursiv ist; -e ist optional, aber das Argument gibt die zu durchsuchende Regex an. Interessanterweise POSIX grep wird nicht benötigt, um -r (oder -R) zu unterstützen, aber Ich bin praktisch sicher, dass System V tat, also in der Praxis sie (fast) alle tun. Einige Versionen von grep unterstützen -R sowie (oder möglicherweise anstelle von) -r; AFAICT, es bedeutet dasselbe.

+0

Ich bin ziemlich sicher, SVR3.2 und SVR4 grep nicht, da ich während dieses Zeitrahmens an OS-Entwicklung für SYSV-Produkte arbeitete, und ich hatte ein RGREP-Shell-Skript, um es zu der Zeit zu wickeln. Ich habe aber keine mehr zu testen. –

+0

@RandyHoward: Danke! SVR3.2 und SVR4.0 sind beide ausreichend alt, dass es mich nicht überrascht, dass mein Speicher fehlerhaft ist. –

+1

'-R' folgt Symlinks, die Sie wollen oder nicht wollen –

Verwandte Themen