如果后面有一个空行,如何只打印一行

时间:2014-01-14 16:06:51

标签: sed text-processing

从某些程序中,我得到表格的输出

aaaaa
bbbbb

ccccc
ddddd
eeeee
fffff

ggggg
hhhhh
iiiii

包括最后一个空行。

我想只得到每个块的最后一行,即每行后跟一个空行:

bbbbb
fffff
iiiii

我尝试使用sed并检查(照例)sed1liners,但无法提供有用的内容。

4 个答案:

答案 0 :(得分:4)

您必须使用hold space

sed -ne '/^$/ { g; p; b }; h; $ { g; p }' infile

它是如何运作的?

对于每个普通行,将其复制到hold spaceh),覆盖以前的内容。对于特殊情况(空行和文件的最后一行),取出保留空间的内容并打印出来。

它产生:

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