Joh*_*ith 3 regex sed blank-line
我编写了一个sed脚本,用一个替换多个空白行,但它没有按预期工作.我将感谢所有能解释我原因的人.请不要参考我的工作示例,我熟悉Google.我只是想了解sed是如何工作的.
代码是
sed ':a;/^\n*$/{N;ba};s/^\n\n*/\n/' input_file
Run Code Online (Sandbox Code Playgroud)
所以逻辑很简单:当sed读取行并且它是空白或有几个换行符号(这是/^*\n$条件)时,我告诉sed将下一行附加到模式空间.一旦找到非空白行,s/^\n\n*/\n/就完成替换.
除了我在文件末尾有空行的情况外,一切正常.这些空白不会被一个空白所取代,我不明白为什么.
有任何想法吗?
在阅读下一行时,问题就出现sed了EOF.
您的命令在阅读下一行时已完成N.因为,在阅读下一行时,sed得到了EOF.所以,它不会处理s/^\n\n*/\n/替代.这就是为什么,你无法删除出现在文件末尾的空行序列.
我的解决方案是:
sed ':a; /^\n*$/{ s/\n//; N; ba};' yourfile
Run Code Online (Sandbox Code Playgroud)