我正在使用verilog,需要在一个独特的块中编辑一个特定的行,但我不确定如何继续
file.v
...
block1 block1(
.port1(port1),
.port2(port2),
);
block2 block2(
.(port2)(port2),
.(port3)(port3)
);
....
我需要以某种方式删除block1中port2的“,”。没有修改block2。其他地方还有多个包含port2的块。
block1 block1(
.port1(port1),
.port2(port2)
);
我一直在尝试awk和sed行的范围,但没有得到结果来成功修改文件。任何建议或解决方案都非常感谢
答案 0 :(得分:3)
这将删除在块结束之前发生的任何逗号(空格,然后是);
):
perl -0777 -pe 's/,(?=\s*\);)//g'
注意:
-0777
导致perl将所有输入作为单个字符串粘贴。这是必需的,因为
-p
会导致perl在修改后打印输入。g
标志表示在字符串中全局执行此操作。答案 1 :(得分:1)
这可能会为你完成这项工作
sed '/block1 block1/,/);/{s/\((port2)\),/\1/}' file.v
答案 2 :(得分:1)
怎么样:
awk -v RS="" '/block1/{sub("port2),","port2)")}7' file
答案 3 :(得分:1)
我想你想删除一个关闭paren()
)之后的逗号,后面跟一个换行符,一个结束符号和一个分号();
)?
在这种情况下,这可能适合您:
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"