如何在作为变量传递给awk的两个正则表达式之间提取字符串?

时间:2017-08-14 16:47:35

标签: shell unix awk

我正在尝试在两个字符串之间的段落中提取一些文本,这些字符串保存在变量中。 以下方式出了什么问题?

输入

module dft ( a, b, c, clk, z, test_si, test_se );

input [7:0] a;

dft_DW_mult_uns_1 mult_31 ( .a(a), .b(b), .product(reg0) );

endmodule

输出:

input [7:0] a;

dft_DW_mult_uns_1 mult_31 ( .a(a), .b(b), .product(reg0) );

使用以下代码:

try="module dft";

awk '/$try/{flag=1; next} /endmodule/{flag=0} flag' dft_syn.v

但它无法识别$ try变量。

1 个答案:

答案 0 :(得分:2)

您可以像这样使用awk

sm="module dft"
em="endmodule"

awk -v sm="$sm" -v em="$em" '$0 ~ em{p=0} p; $0 ~ sm{p=1}' file

...哪个属性作为输出发出:

input [7:0] a;

dft_DW_mult_uns_1 mult_31 ( .a(a), .b(b), .product(reg0) );
  • 使用-v var="value"将命令行变量从shell传递到awk
  • 遇到开始或结束标记时设置并重置变量p