使用sed查找两个模式之间的线条

时间:2013-01-15 08:50:03

标签: sed

我在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”开始吗?

1 个答案:

答案 0 :(得分:6)

这可能适合你(GNU sed):

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