删除文本文件中的第 2 和第 3 个换行符,但不删除第 1 个换行符

删除文本文件中的第 2 和第 3 个换行符,但不删除第 1 个换行符

我正在 max osx 10.8 上进行开发,对于使用哪个工具可能没有偏好,sed但这并不重要。

评论后更新: 输入文件使用 Windows 新行,如果这让事情变得复杂,我可以预处理它们以将新行更改为 Linux 样式。

Text

Text



text


text

text

我想要一个像这样的输出文件

Text

Text
text
text

text

答案1

awk -vRS='\r\n' -vORS='\r\n' '
  /./||!++n{if (n==1) print "";print;n=0}
  END{if (n==1) print ""}'

答案2

或者 perl 变体:

perl -e 'undef $/; $_=<>; s/^\n{2,}//mg; print' < infile

取消设置 ( undef) 字段分隔符 ( $/)。这使得$_=<>将 STDIN 的内容分配到$_.然后搜索并替换 2 个或更多换行符(s/^\n{2,}//mg;),然后print输出(这些操作在 上完成$_)。上面m的搜索选项允许s///换行(多行)匹配,并将g模式应用于字符串中的所有出现(而不仅仅是第一个)。

如果它仅适用于 2 和 3 个新行(而不影响 4 或 5 等),则使用s/^\n{2,3}//mg;

对于 DOS 格式文件:

perl -e 'undef $/; $_=<>; s/^(\r\n){2,}//mg; print' < infile

相关内容