Replace awk sed perl,在一系列行中替换特定模式
我在verilog中工作,需要在唯一块中编辑特定行,但不确定如何继续 文件.vReplace awk sed perl,在一系列行中替换特定模式,replace,sed,awk,block,Replace,Sed,Awk,Block,我在verilog中工作,需要在唯一块中编辑特定行,但不确定如何继续 文件.v ... block1 block1( .port1(port1), .port2(port2), ); block2 block2( .(port2)(port2), .(port3)(port3) ); .... 我需要以某种方式删除block1中port2的“.”。不修改block2。还有多个包含port2的块 bloc
...
block1 block1(
.port1(port1),
.port2(port2),
);
block2 block2(
.(port2)(port2),
.(port3)(port3)
);
....
我需要以某种方式删除block1中port2的“.”。不修改block2。还有多个包含port2的块
block1 block1(
.port1(port1),
.port2(port2)
);
我一直在尝试awk和sed行的范围,但没有得到成功修改文件的结果。非常感谢您的任何建议或解决方案这可能会对您有所帮助
sed '/block1 block1/,/);/{s/\((port2)\),/\1/}' file.v
这可能对你有用
sed '/block1 block1/,/);/{s/\((port2)\),/\1/}' file.v
那么:
awk -v RS="" '/block1/{sub("port2),","port2)")}7' file
那么:
awk -v RS="" '/block1/{sub("port2),","port2)")}7' file
我想您应该删除位于结束符(
)
)后面的逗号,后跟换行符、结束符和分号()代码>)?
在这种情况下,这可能适用于您:
sed -r ':a;N;s/\),\n\s*\);/)\n);/;P;D;ba'
| | | |---------| |---| | | |
| | | | | | | -- branch to label "a"
| | | | | | -- delete up to first newline of pattern space
| | | | | -- print up to first newline of pattern space
| | | | -- replace pattern
| | | -- search pattern
| | -- substitute
| -- read next line into pattern space (append)
-- branch label "a"
我想您应该删除位于结束符()
)后面的逗号,后跟换行符、结束符和分号()代码>)?
在这种情况下,这可能适用于您:
sed -r ':a;N;s/\),\n\s*\);/)\n);/;P;D;ba'
| | | |---------| |---| | | |
| | | | | | | -- branch to label "a"
| | | | | | -- delete up to first newline of pattern space
| | | | | -- print up to first newline of pattern space
| | | | -- replace pattern
| | | -- search pattern
| | -- substitute
| -- read next line into pattern space (append)
-- branch label "a"
这将删除块末尾之前出现的任何逗号(然后是空格)代码>):
注:
-0777
使perl以单个字符串的形式将所有输入读入。这是必需的,因为
- 我们知道中间有新行,所以我们不想逐行阅读
- 逗号和括号之间可能有空行,因此按“段落”阅读也不起作用
-p
使perl在修改后打印输入
- 正则表达式是最棘手的部分
- 它找到一个逗号,然后查找零个或多个空格字符(包括空格、制表符、换行符等),后跟一个右括号和分号
- 先行文本不是匹配文本的一部分(lookahead称为“零宽度断言”)——匹配文本只是逗号
- 如果存在匹配项,请将逗号替换为空字符串
g
标志表示在字符串中全局执行此操作
这将删除块末尾之前出现的任何逗号(然后是空格)代码>):
注:
-0777
使perl以单个字符串的形式将所有输入读入。这是必需的,因为
- 我们知道中间有新行,所以我们不想逐行阅读
- 逗号和括号之间可能有空行,所以“段落”读取也不会起作用
-p
使perl在修改后打印输入
- 正则表达式是最棘手的部分
- 它找到一个逗号,然后查找零个或多个空格字符(包括空格、制表符、换行符等),后跟一个右括号和分号
- 先行文本不是匹配文本的一部分(lookahead称为“零宽度断言”)——匹配文本只是逗号
- 如果存在匹配项,请将逗号替换为空字符串
g
标志表示在字符串中全局执行此操作
谢谢,这比我想象的更强大!你能给我详细解释一下吗?特别是搜索逗号如何在搜索前考虑换行符);谢谢,这比我想象的更强大!你觉得你能为我解释得更详细吗?特别是搜索逗号如何在搜索前考虑换行符);