我写了一个 sed 脚本,它用一个空行替换了多个空行,但它没有按预期工作。我会感谢每一个人,谁能解释我为什么。请不要让我引用工作示例,我熟悉 Google。我只是想了解 sed 是如何工作的。
代码是
sed ':a;/^\n*$/{N;ba};s/^\n\n*/\n/' input_file
所以逻辑很简单:当 sed 读取该行并且它是空白的或有几个换行符(这是
/^*\n$
条件)时,我告诉 sed 将下一行附加到模式空间。一旦找到非空行,替换 s/^\n\n*/\n/
已经完成了。除了文件末尾有空行的情况外,一切正常。这些空白没有被单个空白替换,我不明白为什么。
有任何想法吗?
最佳答案
问题是sed
获取 EOF
在阅读下一行时。
在使用 N
阅读下一行时,您的命令已完成。 .因为,在阅读下一行时,sed
获取 EOF
.所以,它不会处理 s/^\n\n*/\n/
代换。这就是为什么,您无法删除出现在文件末尾的空行序列。
我的解决办法是:
sed ':a; /^\n*$/{ s/\n//; N; ba};' yourfile
关于regex - sed 用单个空行替换多个空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24781112/