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

如何在sed中捕获模式并在后续行前置捕获内容?

解决sed捕获分组并修改下一行的问题

我来帮你搞定这个sed的匹配替换需求!你想要实现的是:匹配到包含#---------- SOLID: xxx_phys.0的行后,在下一行的Shape前加上DEF xxx(其中xxx是前面捕获的内容),正确的sed命令如下:

sed -E '/#---------- SOLID: (.*)_phys\.0/{n;s/Shape/DEF \1 Shape/}' 你的输入文件名.txt

命令细节解释:

  • -E:启用扩展正则表达式语法,这样我们可以直接用(.*)来定义捕获分组,不需要额外转义括号
  • /#---------- SOLID: (.*)_phys\.0/:匹配目标行,(.*)会捕获_phys.0前面的所有内容(比如tank、head),注意这里的.要转义成\.,因为正则表达式里.默认匹配任意字符,转义后才代表字面意义的点号
  • {n;s/Shape/DEF \1 Shape/}:这是匹配到目标行后执行的命令块:
    • n:读取下一行到模式空间,也就是我们需要修改的那一行(包含Shape的行)
    • s/Shape/DEF \1 Shape/:替换操作,\1引用前面捕获的分组内容,把原来的Shape替换成DEF 捕获内容 Shape

示例验证:

输入内容:

[行10] #---------- SOLID: tank_phys.0
[行11] Shape {
...
[行22] #---------- SOLID: head_phys.0
[行23] Shape {

执行命令后输出:

[行10] #---------- SOLID: tank_phys.0
[行11] DEF tank Shape {
...
[行22] #---------- SOLID: head_phys.0
[行23] DEF head Shape {

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:13:17