2017-02-08 1 views
-4

Ich habe kurze Textdatei, wo ich die Ausgabe von Daten mit speziellen Muster machen sollte. Meine Datei:Grep einen Block von Text mit Muster

99 test1 
88 test2 
10 test3 
11 test1 
12 test1 
13 test2 
14 test3 
17 test1 
18 test4 

Eins nach dem anderen, von test1 zu test2 und zu test3. Also ... ich die comand geschrieben haben:

sed '/test1.*\|test2.*\|test3/!d' filename 

Und in der Ausgabe i Ergebnis haben:

99 test1 
88 test2 
10 test3 
11 test1 
12 test1 
13 test2 
14 test3 
17 test1 

In diesem Fall habe ich Linien, dass ich nicht brauchen:

11 test1 

17 test1 

Diese Zeilen gehen nicht eins nach dem anderen. Wie kann ich Ergebnisse erzielen, die ich brauche? Bitte hilf mir. Danke für Ihre Aufmerksamkeit. i Sollte dieses Ergebnis:

99 test1 
88 test2 
10 test3 
12 test1 
13 test2 
14 test3 
+3

Haben Sie bemerkt, dass Ihre Frage unklar ist? –

+3

Was sind die Kriterien, um festzustellen, dass diese Zeilen nicht benötigt werden? –

+0

Willst du sagen, dass du die Zeilen benötigst, die eine komplette Sequenz von 'test {1,2,3}' Zeilen haben und alle anderen entfernen? Wenn ja: Bitte fügen Sie diese Formulierung zu Ihrer Frage hinzu, damit sie für andere Nutzer verständlich wird. – sorontar

Antwort

0

Eine einfache schnelle Art und Weise, wenn auch nicht sehr elegant, ist es in einer Zeile zu setzen, brechen sie in dem gewünschten Muster, und dann filtert wieder mit dem Muster:

sed ':a;N;$!ba;s/\n/\\n/g' < filename | \ 
sed 's/\([0-9][0-9] test1\\n[0-9][0-9] test2\\n[0-9][0-9] test3\\n\)/\n\1\n/g' | \ 
egrep "[0-9][0-9] test1\\\n[0-9][0-9] test2\\\n[0-9][0-9] test3\\\n" | \ 
sed 's/\\n/\n/g' | grep . 
+0

nicht schlecht. aber in der Ausgabe, ich habe: 99 test1 88 test2 10 test3. aber ich sollte: 99 test1 88 test2 10 test3 12 test1 13 test2 14 test3 – Valeriu

+0

Werke wie für mich erwartet, vielleicht haben Sie einen anderen Geschmack von grep und sed. Sie sollten die Ausgabe ohne die letzten beiden Befehle (grep und sed) überprüfen, um zu sehen, was Sie bekommen und dann von dort aus arbeiten. –

+0

In Ihrem Fall habe ich die ersten drei Zeilen ausgegeben, aber ich sollte alle Zeilen in Muster (test1, test2, test3) erhalten – Valeriu