You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量移除文本文件中后接空格的换行符

跨行文本清理方案

你的需求本质是仅删除「后面紧跟1个或多个空格/缩进的换行符」,保留其他正常行尾换行,tr 命令只能做单字符级别的等量替换,无法判断字符前后的上下文关系,所以会把所有换行、回车都替换成空格,达不到预期效果。

下面给两个可直接用、适合批量处理的实现:

方案1:Perl 单行命令(最通用,兼容全平台换行格式)

这个方案兼容Windows格式的\r\n换行和Unix格式的\n换行,会自动把换行+后续缩进的部分替换成单个空格,拼接跨行的条目,其他正常换行完全保留,同时会自动清掉换行后多余的缩进空格,排版更整洁。

  • 单文件测试(不修改原文件,结果打印到终端确认效果):
perl -0777 -pe 's/\r?\n\s+/ /g' 你的文件路径.txt
  • 批量处理当前目录下所有txt文件,原地修改同时自动生成.bak后缀备份:
for f in *.txt; do
  perl -0777 -i.bak -pe 's/\r?\n\s+/ /g' "$f"
done

确认处理结果无误后,可执行rm *.bak删除所有备份文件。如果不需要备份,Linux环境可把-i.bak改成-i,macOS环境改成-i ''即可。Windows环境安装Git Bash或者WSL后即可直接执行上述命令。

方案2:GNU Awk 实现(适合系统没有Perl的环境)

如果你的环境是Linux,默认带的GNU Awk也可以实现完全一致的效果,原理是一次性读取整个文件内容做全局匹配替换:

# 单文件测试
awk 'BEGIN{RS="^$";ORS=""} {gsub(/\r?\n[[:space:]]+/," ");print}' test.txt > test_fixed.txt

批量处理同样可以套shell循环实现,逻辑和上面Perl版本一致。

效果验证

用你给出的示例内容测试,处理后输出结果为:

info 1 : holiday
info 2: today the weather is very hot

正常条目info 1的行尾换行完整保留,info 2的跨行内容被拼接成同一行,完全符合需求。

内容的提问来源于stack exchange,提问作者Sami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:36:29