在第一次出现后仅在模式匹配后追加一行

时间:2015-08-21 11:27:33

标签: awk sed

我有多个文件,如下所示

module ( 
input a;
output b;
);

xx inst_xx (
.in     (xxin),
.ou     (xxou)
);

assign a = b;

endmodule 

我想在第一次出现);模式

后追加一行
`include "defines.vh" 

所以最后看起来应该是

module ( 
input a;
output b;
);
`include "defines.vh"

xx inst_xx (
    .in     (xxin),
    .ou     (xxou)
);

assign a = b;

endmodule 

使用sedawk的任何内容都会有用。

2 个答案:

答案 0 :(得分:1)

$ awk '{ print } !flag && /);/ { print "`include \"defines.vh\""; flag = 1 }' file
module (
input a;
output b;
);
`include "defines.vh"

xx inst_xx (
.in     (xxin),
.ou     (xxou)
);

assign a = b;

endmodule

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed $'/);/{a`include "defines.vh"\n;:a;n;ba}' file

或:

sed -e '/);/{a`include "defines.vh"' -e ':a;n;ba}' file

这匹配第一个);并附加所需的字符串然后读取并打印n命令上循环的文件的其余部分。