sed匹配多行然后追加

时间:2012-05-09 22:18:07

标签: sed

我想在verilog端口列表后附加一些代码,其格式为:

module module_name (
input wire in1,
input wire in2,
output wire out1
);

我正在寻找有关如何使用sed(或其他命令)查找以“module”开头并以“)”结尾的端口列表的帮助;“然后在“);”

之后的行上附加一些代码

命令:

sed '/^module/,/);/a code to append' test.v

将“代码附加”放在匹配序列中的每一行上,而不仅仅是在

之后
module module_name (
code to append
input wire in1,
code to append
input wire in2,
code to append
output wire out1
code to append
);
code to append

4 个答案:

答案 0 :(得分:3)

这可能对您有用:

sed '/^module/,/);/!b;/);/a\NEWCODE' file

答案 1 :(得分:1)

这是一个小小的问题,但它会完成这项工作:

sed ':a /module/s/);/);\ncode to append/;t;N;b a' filename

答案 2 :(得分:0)

您可以使用命令行perl代替sed而不是:

perl -0pe 's@(module[^(]*\([^)]*\)\s*;)@$1'"\na code to append"'@' test.v

输出

module module_name (
input wire in1,
input wire in2,
output wire out1
);
a code to append

答案 3 :(得分:0)

既然你说sed或任何其他命令我将用perl回答。您可以使用以下命令在perl中执行此操作:

# perl -pe 'BEGIN { $/ = undef; }s#(^module.+?\);)#$1\ncode to append#omgs' test.v

module module_name (
input wire in1,
input wire in2,
output wire out1
);
code to append