我正在 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