7

次のように text.txt に行があります。

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..

上記の例の場合、「efg」と「efg」の前に「abc」が最後に出現する間の行を出力したい:

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

sed は、次のような 2 つのパターンを使用して範囲を選択できることを知っています。

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

ただし、出力は最後の "abc" ではなく、最初に出現した "abc" から開始されます。出力は次のようになります。

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

出力が最後に出現した "abc" から開始されるように、コマンド ラインで何らかの機能強化を行うことはできますか?

4

1 に答える 1

6

これはうまくいくかもしれません(GNU sed):

sed -n '/\<abc\>/,/\<efg\>/{/\<abc\>/{h;d};H;/\<efg\>/{x;p}}' file
于 2013-01-15T09:25:23.793 に答える