2013-01-15 13 views
7

ich die Zeilen in text.txt haben, wie unten:Fund Linien zwischen zwei Mustern sed Verwendung

blah blah.. 
blah abc blah.. 
blah abc blah 
blah blah.. 
blah blah.. 
blah blah.. 
blah efg blah blah 
blah blah.. 
blah abc blah 
blah abc blah 
blah abc blah 
blah abc blah 
blah abc blah 
blah blah.. 
blah efg blah blah 
blah blah.. 
blah blah.. 

ich die Linien zwischen jedem letzten Vorkommen von „abc“ vor „efg“ und „efg“ ausgegeben werden soll , für das obige Beispiel, ich möchte Ausgabe:

blah abc blah 
blah blah.. 
blah blah.. 
blah blah.. 
blah efg blah blah 
blah abc blah 
blah blah.. 
blah efg blah blah 

ich weiß, sed Bereiche mit zwei Mustern auswählen können, wie:

sed -n '/abc/,/efg/p' test.txt 

Howeve r die Ausgabe von dem ersten Auftreten von „abc“ anstelle dem letzten beginnt, ist die Ausgabe wie folgt:

blah abc blah.. 
blah abc blah 
blah blah.. 
blah blah.. 
blah blah.. 
blah efg blah blah 
blah abc blah 
blah abc blah 
blah abc blah 
blah abc blah 
blah abc blah 
blah blah.. 
blah efg blah blah 

Jede Erweiterung kann ich auf der Kommandozeile zu tun, so dass die Ausgabe von einem letzten Auftreten beginnen von "abc"?

Antwort

6

Dies könnte für Sie arbeiten (GNU sed):

sed -n '/\<abc\>/,/\<efg\>/{/\<abc\>/{h;d};H;/\<efg\>/{x;p}}' file 
+3

ich einige suchen, dies zu verstehen hat, korrigiert mich wenn ich falsch liege: 1, entkam spitzen Klammern optional sind, die darauf hindeuten, was wir suchen denn es sind Worte. In Fig. 2 bedeutet "h" -Befehl das Speichern des Musterraums in den Haltepuffer, "H" bedeutet das Anfügen des Musterraums in den Haltepuffer, "x" bedeutet das Austauschen des Musterraums und des Haltepuffers. 3, der gesamte Befehl wird zunächst die Bereiche beginnend mit der ersten Zeile enthält "abc" und endet mit der folgenden ersten Zeile enthält "efg", und dann in jedem Bereich finden Sie die letzte Zeile enthalten "abc", und speichern Sie die folgenden Zeilen bis die Zeile 'efg' enthält, und drucken sie – poiu2000

+0

danke @potong für eine solche gute Lösung – poiu2000

Verwandte Themen