2011-01-31 57 views
2

我想從使用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中感興趣。謝謝。

回答

3

可能:

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

與保持緩衝器另一種方式:

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

貝努瓦,以保持緩衝器的第二種方式是什麼,我一直在尋找。謝謝。 – ak83 2011-01-31 12:02:10

3

這可能會爲你工作:

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