使用sed删除行

时间:2013-11-08 06:58:12

标签: linux bash shell sed

我有一个如下文件。我想在foo之前删除所有行,但只留下最后一个bar的实例。 输入:

bar1
foo
bar1
bar2
bar3
foo
bar5
bar6
bar7
foo

输出:

bar1
foo
bar3
foo
bar7
foo

有人可以帮助我如何实现这一目标。我正在尝试使用sed但我的所有尝试都没有给予任何东西。

3 个答案:

答案 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