sed "/^ *$/{:loop;N;s/^ *\n *$//;t loop}" a.txt
学习了
我来试着解释一下吧(蓝色表示模式空间的内容)
/^ *$/{:loop;N;s/^ *\n *$//;t loop}表示对所有的空白行执行操作{:loop;N;s/^ *\n *$//;t loop}
读第一行,/^ *$/匹配失败,直接打印。
读第二行,/^ *$/匹配成功,执行{:loop;N;s/^ *\n *$//;t loop}
N操作读第三行,
\nbbbbbbbbbb,/^ *\n *$//匹配失败,打印。
读第四行,/^ *$/匹配成功,执行{:loop;N;s/^ *\n *$//;t loop}
N操作读第五行,
\n\n,/^ *\n *$//匹配成功,
\n,跳转到:loop。
N操作读第六行,
\ncccccccccccc,/^ *\n *$//匹配失败,打印。
......