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 可以使用两种模式选择范围,例如:

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

但是输出将从“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 回答