Grep-Ergebnisse in Textdatei ausgeben, sauberere Ausgabe benötigen

83

Wie speichere ich die Ergebnisse in einer Textdatei, wenn ich den Befehl Grep verwende, um eine Suchzeichenfolge in einer Reihe von Dateien zu finden?

Gibt es auch einen Schalter für den Befehl Grep, der sauberere Ergebnisse für eine bessere Lesbarkeit liefert, z. B. einen Zeilenvorschub zwischen den einzelnen Einträgen oder eine Möglichkeit, Dateinamen und Suchergebnisse zu rechtfertigen?

Zum Beispiel eine Abwesenheit zu ändern ...

./file/path: first result
./another/file/path: second result
./a/third/file/path/here: third result

zu

./file/path: first result

./another/file/path: second result

./a/third/file/path/here: third result
user2398188
quelle
14
Ich finde es toll, dass diese wirklich super hilfreichen Fragen "keine echte Frage" Jahre später in den Top-Suchergebnissen von Google gelandet sind.
Adrian Carr

Antworten:

110
grep -n "YOUR SEARCH STRING" * > output-file

Das -ndruckt die Zeilennummer und >leitet grep-Ergebnisse in die Ausgabedatei um.
Wenn Sie die Ergebnisse "bereinigen" möchten, können Sie sie beispielsweise mit Pipe filtern |: Sie
grep -n "test" * | grep -v "mytest" > output-file stimmen mit allen Zeilen überein, die die Zeichenfolge "test" haben, mit Ausnahme der Zeilen, die mit der Zeichenfolge "mytest" übereinstimmen (das ist der Schalter -v) - und leiten die um Ergebnis zu einer Ausgabedatei.
Ein paar gute Grep-Tipps finden Sie in diesem Beitrag

Nir Alfasi
quelle
10
Schreibt grep nur, wenn es fertig ist, oder schreibt es Zeile für Zeile, während es den Inhalt verarbeitet? Vielen Dank!
Crista23
5
@alfasin - überschreibt das einzelne '>' nicht die Ergebnisse in der Ausgabedatei? Sollten wir nicht double '>>' verwenden, um die Ergebnisse an die Datei anzuhängen?
GTodorov
3
@ GTodorov ja, wenn Sie die Verwendung anhängen möchten>>
Nir Alfasi
12
Für zukünftige Besucher ist die Antwort auf die Frage von @ Crista23, dass sie schreibt, wenn der
Grep
35

Die Umleitung der Programmausgabe erfolgt durch die Shell.

grep ... > output.txt

grepEs gibt keinen Mechanismus zum Hinzufügen von Leerzeilen zwischen den einzelnen Übereinstimmungen, es werden jedoch Optionen wie der Kontext um die übereinstimmende Zeile und die Färbung der Übereinstimmung selbst bereitgestellt. Weitere grep(1)Informationen, insbesondere die Optionen -Cund, finden Sie in der Manpage --color.

Ignacio Vazquez-Abrams
quelle