如何用awk或其他命令移除文本换行但保留段落空行?
解决方案
1. 使用awk命令
这个方法可以精准合并段落内换行,同时自动压缩连续空行为单个空行:
awk ' /^[[:space:]]*$/ { if (!blank_printed) { print "" blank_printed = 1 } next } { printf "%s", $0 blank_printed = 0 } END { print "" } ' my_text.txt > new_text.txt
- 逻辑:遇到空行(含全是空格的行)时,仅输出一个空行并标记;非空行直接拼接内容不输出换行;最后在结尾补换行保证格式完整。
2. 使用sed命令
通过循环合并非空行的换行符,保留段落间空行:
sed -e ':a' -e '/^$/!{N;s/\n/ /;ba}' my_text.txt > new_text.txt
- 逻辑:定义循环标签
a,若当前行非空,就读入下一行(N),将两行间的换行替换为空格,回到标签继续循环合并;空行直接保留输出。
3. 使用perl命令
借助段落模式快速处理,代码更简洁:
perl -00 -pe 's/\n/ /g' my_text.txt > new_text.txt
- 逻辑:
-00启用段落模式(以空行分隔文本块),-pe逐段处理,把每个段落内的所有换行替换为空格,段落间自动保留空行。
内容的提问来源于stack exchange,提问作者Moqtite
相关产品推荐
相关产品推荐

