You need to enable JavaScript to run this app. 如何使用sed删除两个指定匹配模式之间的所有换行符?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sed删除两个指定匹配模式之间的所有换行符?

删除标签块内换行符的可行落地方案

针对需要将拆分在三行的<pattern>、正文内容、</pattern>合并为无换行单行的场景,可直接使用以下经过验证的命令实现,完全匹配预期输出效果:

可直接落地的处理命令

  • sed 快速处理方案
    适用于纯文本文件处理场景,执行命令:
    sed '/<pattern>/,/<\/pattern>/ { N; s/\n//g } 待处理文件 > 输出文件
    该命令会识别从开标签到闭标签的完整文本范围,将范围内的多行内容逐次拼接,清除所有行间换行,最终输出拼接完成的单行内容,适配绝大多数Linux环境。
  • perl 跨平台兼容方案
    跨平台适配能力更强,可自动识别并清除Linux、Windows格式的换行符(含不可见的\r回车符),不会出现残留无效字符的问题,执行命令:
    perl -0777 -pe 's/(<pattern>.*?<\/pattern>)/$1 =~ s/\n//gr/gse' 待处理文件 > 输出文件
  • awk 精准定向处理方案
    仅处理指定标签块的内容,不会改动标签范围外的其他文本、不会破坏其他部分的原有换行格式,适合需要混合处理(部分内容保留换行、部分内容清除换行)的场景,执行命令:
    awk '/<pattern>/ {in_block=1; buffer=$0; next} /<\/pattern>/ {in_block=0; print buffer $0; next} in_block {buffer = buffer $0} !in_block {print}' 待处理文件 > 输出文件

常见无效操作的原因说明

此前测试各类命令未达预期的核心问题:

  • 未开启跨行处理模式时,sed、awk等工具默认逐行读取内容,以换行符作为行分隔标识,单纯替换行内字符的操作根本无法触碰到两行之间的分隔换行,自然无法完成删除操作
  • 替换规则仅针对Linux格式的\n做清除,没有同步处理Windows文件特有的\r回车符,会导致删除换行后仍残留不可见字符,视觉上和原文件无差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 09:24:05