我有一个如下文件。我想在foo之前删除所有行,但只留下最后一个bar的实例。 输入:
bar1
foo
bar1
bar2
bar3
foo
bar5
bar6
bar7
foo
输出:
bar1
foo
bar3
foo
bar7
foo
有人可以帮助我如何实现这一目标。我正在尝试使用sed但我的所有尝试都没有给予任何东西。
答案 0 :(得分:6)
我希望它不一定是sed
。使用grep
的{{1}}选项打印匹配的行和前一行:
-B
答案 1 :(得分:1)
使用awk
即可:
awk '/^foo/ {print a "\n" $0} /^bar/ {a=$0}' file
bar1
foo
bar3
foo
bar7
foo
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed '$!N;/^bar.*\nfoo/!D' file