2017-10-25 6 views
1

Ich habe eine große Protokolldatei, in der ich derzeit zwei Befehle ausführe. Ich suche die Gruppe log und dann eine gefilterte Datei machen, wo ich die folgenden drei Zeilen nach einem Spiel zurück:Verketten von Grep-Befehlen, um Werte von verschiedenen Zeilen zurückzugeben

cat testFile.log |grep 'Text I am looking for' -A 3 > filter.txt 

Dann, wenn ich meine gefilterten Datei, scanne ich durch diese Datei selbst eine endgültige Datei des erstellen Werte ich möchte:

cat filter.txt | grep -E 'Data\w{7}' -o > final.txt 

Mein Ziel ist es dies in einer Zeile zu tun, wenn möglich, so kann ich ein paar dieser Kontrollen zusammen in einem Skript wickeln, damit ich springen kann und x, y, z suchen und dann ich eine Reihe von finalisierten Dateien am Ende für jeden erhalten.

+0

Warum machst du das nicht? 'grep 'Text ...' -A3 testFile.log | grep -oE 'Data ...'> final.txt' – fedorqui

+0

ah brilliant danke sehr viel :) will das in eine antwort für mich werfen :)? –

Antwort

0

Sie müssen nur Rohre verwenden. Das heißt, die UNIX-Kern-Denkweise, bei der kleine Teile zu einem schönen Werkzeug zusammengefügt werden.

In diesem Fall müssen Sie Aufträge:

grep 'Text I am looking for' -A 3 testFile.log > filter.txt # 1 
grep -E 'Data\w{7}' -o filter.txt > final.txt    # 2 

(Anmerkung ich die cat file | grep '...' entfernt, da es das gleiche wie zu sagen grep '...' file ist)

Da die Ausgabe von 1 # # 2 ist, zu füttern Verwenden Sie nur Rohre:

grep -A 3 'Text I am looking for' testFile.log | grep -Eo 'Data\w{7}' > final.txt 

Auf diese Weise verhindern Sie die Verwendung einer unnötigen Zwischendatei.

Verwandte Themen