我想使用sed从文件中获取最后一个非空行。我能够使用两个流水线sed实现预期的结果:
$ echo -e "\n\none\n\ntwo\n\n\nthree\n\n" | sed '/^$/d' | sed -n '$p'
three
但是,我想知道是否可以使用一个sed命令来获得它。也许通过将每个非空白行一个接一个地复制到缓冲区,覆盖以前的内容并在结束时打印缓冲区?我不确定它是否可以在sed中完成,这只是我的猜测。
请不要建议我使用awk,tail等 - 我只对sed感兴趣。谢谢。
答案 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