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

如何使用sed忽略两个匹配模式间的行,仅保留外部文本内容?

解决方案

没问题,我来帮你搞定这个需求!你要提取的是==START到==END块之外的内容,分两种场景给你对应的sed命令:

场景1:文件是多行结构(块占单行或多行)

如果你的file1是类似这样的多行内容:

outside-text1
==START inner-text1 ==END
outside-text2
==START inner-text2 ==END

或者块跨多行:

outside-text1
==START
inner-text1
==END
outside-text2
==START
inner-text2
==END

直接用这个命令就能删除所有==START到==END范围内的行,剩下的就是你要的内容:

sed '/==START/,/==END/d' file1

原理

/==START/,/==END/d 是sed的地址范围语法,表示删除从匹配==START的行开始,一直到匹配==END的行结束的所有行,剩下的行就是你需要的outside-text1和outside-text2。

场景2:所有内容在单行内

如果你的file1是单行文本,比如:

outside-text1 ==START inner-text1 ==END outside-text2 ==START inner-text2 ==END

用替换命令把所有==START到==END的块清空:

sed 's/==START.*==END//g' file1

如果你的文本里有多个独立的==START...==END块,担心sed的贪婪匹配(会把第一个==START到最后一个==END的所有内容删掉),可以用GNU sed的扩展正则实现非贪婪匹配:

sed -E 's/==START.*?==END//g' file1

原理

s/匹配规则/替换内容/g 是sed的全局替换语法,这里把所有匹配==START到==END的部分替换为空字符串,g表示替换所有匹配项;-E启用扩展正则后,.*?表示非贪婪匹配,会匹配到最近的==END就停止,避免误删中间的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:09:18