sed空行规则二

sed空行规则二

sed模式空间里的空行表示:
^$	:表示该模式空间里有且只有一个空行,么有其他任何东西
^\n    :表示该模式空间里是以一个空行开始
\n$    :表示该模式空间里是以一个空行结尾
^\n$   :表示该模式空间里有且只有两个连续的空行

经典案例1,删除多余的空行
sed -i  '
/^$/{
N
/^\n$/D
}'  file
解释: 
/^$/表示匹配到了空行,因为^表示开头,$表示结尾,中间为空即表示空行。
/^\n$/表示匹配到两个空行,以\n分割,^标记模式空间里的开头位置,$标记最后位置.

生产案例2,以#开的行,紧邻的下一行如果为空行,那么删除该#开头的注释行
sed -i '
/^#.*/{
N
/^#.*\n$/D
}'  file
file内容如:
##
xml

##

hello

#

#
2


#

1

如果是,以#开头的注释行和其紧邻的下一行空行,也一起删掉的话,把D改为d即可
sed或awk尽量写多行命令,逻辑比较清晰,单行命令可能看着比较费劲.