如何使用sed打印最后一个非空白行?

时间:2011-01-31 10:29:37

标签: regex sed

我想使用sed从文件中获取最后一个非空行。我能够使用两个流水线sed实现预期的结果:

$ echo -e "\n\none\n\ntwo\n\n\nthree\n\n" | sed '/^$/d' | sed -n '$p'
three

但是,我想知道是否可以使用一个sed命令来获得它。也许通过将每个非空白行一个接一个地复制到缓冲区,覆盖以前的内容并在结束时打印缓冲区?我不确定它是否可以在sed中完成,这只是我的猜测。

请不要建议我使用awk,tail等 - 我只对sed感兴趣。谢谢。

2 个答案:

答案 0 :(得分:3)

也许:

sed -e '/^$/d' -e '$ !d'

使用保持缓冲区的其他方式:

sed -e '/^$/ !h
        $ {x;p;}'

答案 1 :(得分:3)

这可能对您有用:

echo -e "\n\none\n\ntwo\n\n\nthree\n\n" |
sed '/^$/!h;$!d;g'
three