从某些程序中,我得到表格的输出
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
iiiii
包括最后一个空行。
我想只得到每个块的最后一行,即每行后跟一个空行:
bbbbb
fffff
iiiii
我尝试使用sed
并检查(照例)sed1liners,但无法提供有用的内容。
答案 0 :(得分:4)
您必须使用hold space
。
sed -ne '/^$/ { g; p; b }; h; $ { g; p }' infile
它是如何运作的?
对于每个普通行,将其复制到hold space
(h
),覆盖以前的内容。对于特殊情况(空行和文件的最后一行),取出保留空间的内容并打印出来。
它产生:
bbbbb
fffff
iiiii
答案 1 :(得分:3)
用awk:
awk '
/^[[:blank:]]*$/ {print prev}
{prev=$0}
END {if (length(prev)) print prev}
'
答案 2 :(得分:2)
使用awk
:
$ awk '!$0{print a} {a=$0}' file
bbbbb
fffff
!$0{print a}
如果该行为空,则打印存储的行a
。{a=$0}
将该行存储在变量a
。答案 3 :(得分:0)
这可能适合你(GNU sed):
sed '$!N;/.\n$/P;D' file