我在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”开始吗?
答案 0 :(得分:6)
这可能适合你(GNU sed):
sed -n '/\<abc\>/,/\<efg\>/{/\<abc\>/{h;d};H;/\<efg\>/{x;p}}' file