如何使用sed命令删除从‘GOOD1 bad’到分号的多行内容?
用sed跨多行删除指定内容的解决方案
直接执行以下sed命令即可完成需求:
sed -i '/^GOOD1 bad/,/;/d' filename.txt
命令详解
/^GOOD1 bad/:精准匹配以"GOOD1 bad"开头的行,作为删除区间的起始标记/;/:匹配包含分号的行,作为删除区间的结束标记(包含该行),:连接前后两个匹配规则,指定要处理的连续行区间d:对匹配到的区间执行删除操作-i:直接修改原文件(若仅需预览处理结果,去掉-i参数即可)
原命令失效原因
你之前用的sed -i -e {s/GOOD1 bad//g} filename.txt是单行文本替换逻辑,仅能删除单行内的"GOOD1 bad"字符串,但目标内容是跨多行的连续块,这种单行替换方式无法覆盖多区间的删除需求,因此没有效果。
示例验证
处理前内容:
LUCK bad ( .abc(abc), .bcd(bcd), .def(def)); GOOD1 bad ( .abc(abc), .bcd(bcd), .def(def));
处理后内容:
LUCK bad ( .abc(abc), .bcd(bcd), .def(def));
内容的提问来源于stack exchange,提问作者Chang
相关产品推荐
相关产品推荐

