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尽量写多行命令,逻辑比较清晰,单行命令可能看着比较费劲.