如何在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
相关产品推荐
相关产品推荐

