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

如何用sed删除指定位置的换行符?实操遇阻求解决方案

问题:删除文本中特定位置的换行符

原始输入文本:

Code=200]:[ (381_3544|null|https_//cdn10.connected-stories.com)(
             Penn State World Campus  - San Deigo
        |TV)]:677:01:SUCCESS
20220929010707:[url=https_//rtr.innovid.com/r1.62b49edb185030.50315160;cb=1372882909, breakId=1

想要得到的输出:

Code=200]:[ (381_3544|null|https_//cdn10.connected-stories.com)(Penn State World Campus  - San Deigo|TV)]:677:01:SUCCESS
20220929010707:[url=https_//rtr.innovid.com/r1.62b49edb185030.50315160;cb=1372882909, breakId=1

尝试过的命令:

sed -ie "s/San Deigo\n/San Deigo/g"

该命令无效果,使用-z选项时会删除所有换行,将所有内容合并到第一行,求正确的解决办法。


解决方法

可以利用sed的多行处理能力,精准匹配需要删除的换行位置:

方法一:sed命令

sed -e '/)$/{N;s/(\n\s*/(/;s/Deigo\n\s*/Deigo/}' 你的文件名.txt

如果需要直接修改原文件,添加-i选项:

sed -ie '/)$/{N;s/(\n\s*/(/;s/Deigo\n\s*/Deigo/}' 你的文件名.txt

命令说明:

  • /)$/:定位到以)结尾的行(也就是第一行)
  • N:把下一行追加到当前处理的行中,实现多行合并处理
  • s/(\n\s*/(/:将(后面的换行符和所有空白字符替换成单个(
  • s/Deigo\n\s*/Deigo/:将Deigo后面的换行符和所有空白字符替换成Deigo

方法二:awk命令

如果更习惯用awk,也可以这样写:

awk 'NR==1{buf=$0;next} NR==2{buf=buf $0; gsub(/\(\n\s*/,"(",buf); gsub(/Deigo\n\s*/,"Deigo",buf); print buf} NR>=3{print}' 你的文件名.txt

为什么之前的命令无效?

  • 你之前的sed命令无效,是因为sed默认按单行处理,\n在单行模式下无法匹配实际的换行符,必须通过N等命令启用多行模式后才能处理跨行内容。
  • -z选项会把整个文件读成一个无换行的长字符串,所以会删掉所有换行,不符合只删除特定位置换行的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:15:38