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

如何使用sed命令去除字符串中的重复字符(如换行符)

要把连续多个换行符压缩成单个,以下几种常用命令可以实现:

方法1:使用 tr(最简单)

tr 的 -s 选项专门用来压缩连续重复的字符,直接指定换行符即可:

tr -s '\n' < input.txt > output.txt

-s 会把连续出现的指定字符(这里是\n)替换成单个,非连续的换行保持不变。

方法2:使用 GNU sed

sed 默认逐行处理,换行符是行分隔符,所以需要特殊处理多行:

方式A:利用多行模式空间

sed '/^$/N;/^\n$/D' input.txt
  • /^$/N:匹配空行时,把下一行加入模式空间
  • /^\n$/D:如果模式空间里是两个连续空行(即\n开头),删除第一个换行符并重新处理

方式B:使用 -z 选项(GNU sed 独有)

把整个文件读成一个字符串(用NUL分隔),直接替换连续换行:

sed -z 's/\n\n\+/\n/g' input.txt

\n\n\+ 匹配两个及以上连续换行,替换成单个换行。注意如果原文件末尾有多个换行,可能需要额外处理。

方法3:使用 awk

通过跟踪空行状态来过滤连续空行:

awk 'NF {print; blank=0} !NF {if (!blank) {print; blank=1}}' input.txt
  • NF:匹配非空行,打印并重置空行标记blank为0
  • !NF:匹配空行,只有当blank为0时才打印,然后把blank设为1,避免连续输出空行

为什么你之前的命令无效

你用的sed s/\n//g会删除所有换行,是因为sed默认把每一行读入模式空间时,换行符作为行分隔符被过滤掉了,模式空间里根本没有换行符,所以这个命令实际上不会对换行生效——除非用特殊方式让sed处理多行内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:05:30