我在 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”开始?
最佳答案
这可能对你有用(GNU sed):
sed -n '/\<abc\>/,/\<efg\>/{/\<abc\>/{h;d};H;/\<efg\>/{x;p}}' file
关于sed - 使用 sed 查找两个模式之间的线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14334032/