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

如何在sed中匹配指定模式且排除特定字符串后追加行?

问题:用sed在指定行后添加内容

需求:在文件中以#开头、包含hello但不包含bye的行后添加一行new line。

输入文件内容:

# abc def hello
# bye hello zzzz
# abc def hello

期望输出:

# abc def hello
new line
# bye hello zzzz
# abc def hello
new line

现有命令:

sed -e '/^#.*hello.*/Ia\'\"new line\" $input_file

已知sed有排除模式(如/pattern/!),但不知道如何把/bye/!加入到现有命令中,请教调整方法。


解决方案

直接组合多个匹配条件就能实现,sed支持串联匹配规则,要同时满足「以#开头、含hello、不含bye」这三个要求,调整后的命令有两种写法:

写法一(逻辑清晰,推荐)

sed -e '/^#.*hello/ { /bye/!I a\'$'\nnew line' }' $input_file
  • 先通过/^#.*hello/筛选出以#开头且包含hello的行
  • 再在这个范围内用/bye/!排除掉包含bye的行,对剩下的行执行a命令插入new line
  • I是忽略大小写匹配的标记,不需要大小写不敏感的话可以删掉
  • $'\n'用来生成换行符,保证新行能正确插入到目标行后面

写法二(通过删除非目标行过滤)

sed -e '/^#.*hello/ !d; /bye/ !I a\'$'\nnew line' $input_file
  • /^#.*hello/ !d:先删掉所有不满足「以#开头+含hello」的行,只留下候选行
  • 再对候选行排除含bye的,然后添加新行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:55:07