2009-02-20 6 views
5

Hallo Ich verwende diesen Befehl Text in Dateien unter LinuxWie drucke ich die Zeile, die zu meinem Text passt, mit find in linux?

find ./ -type f -exec grep -l "Text To Find" {} \; 

Der Befehl zu finden funktioniert gut, aber ich möchte automatisch die Zeile drucken, die den Text enthält, oder wenn es möglich ist, die Tannen zwei obigen Zeilen der Text und die zwei Zeilen hinter dem Text.

Auch andere Vorschläge Text zu finden und die Linien statt finden Verwendung ausdrucken sind willkommen,

Vielen Dank im Voraus.

Antwort

14
find ./ -type f -exec grep -Hn "Text To Find" {} \; 

Verwenden -A und -B-Flags Linien vor und nach dem Spiel drucken:

find ./ -type f -exec grep -Hn -A1 -B1 "Text To Find" {} \; 

auch können Sie einfach grep verwenden:

grep -R -Hn -A1 -B1 "Text To Find" * 
2

Warum grep nicht nur?

grep -r -C2 "Text To Find" * 
+0

Da die '-r' Option nicht tragbar ist (in der Tat auch nicht' C', aber hey, hat er danach gefragt.:)) – vladr

+0

Das Plakat sagte "Auch andere Vorschläge, um Text zu finden und die Zeilen zu drucken, anstatt find zu verwenden, sind willkommen" und markierten die Frage "linux", also ist GNU Grep wohl in Ordnung. –

1

Um die Linien (mit der Datei, die sie enthält) zu drucken:

find . -type f -exec grep "text" {} /dev/null \;

Um zu sehen, 2 Zeilen nach der Zeile, die -A2 nach "grep" in dem hinzufügen Spielen über der Linie, -B2 für die zwei Linien vor, und -C2 für beide.

1
find ./ -type f -exec egrep -H -B 2 -A 2 "Text" '{}' ';' 
3

Sie die folgenden alternativen find Konstrukt für eine schnellere Suche verwenden: für jede Datei (was -exec ... {} der Fall ist), wird er berufen grep für Trauben grep von

find . -type f -print0 | xargs -0 grep -Hn -C2 "Text To Find" 

Statt Aufruf von Dateien.

Beachten Sie, dass die -print0, -0 und -C2 Optionen nicht tragbar sind (mit den GNU-Varianten der find, xargs und grep Programme, dh die meisten Linux, BSD usw. Installationen sowie Cygwin und MinGW gut funktionieren, aber nicht erwarte, dass sie mit "älteren" Solaris, HPUX etc. Installationen arbeiten.)

+0

Und verwenden Sie "-print0" für die Suche und "-0" für xargs. Dies hilft bei Dateien mit Leerzeichen in ihren Namen, indem NULL als Trennzeichen und nicht als Leerzeichen verwendet wird. – Andy