Comment extraire une chaîne entre deux expressions régulières passées en tant que variables à awk?

J’essaie d’extraire du texte dans un passage entre deux chaînes enregistrées dans des variables. Quel est le problème avec la manière suivante?

consortingbution:

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 

sortie:

 input [7:0] a; dft_DW_mult_uns_1 mult_31 ( .a(a), .b(b), .product(reg0) ); 

en utilisant le code suivant:

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

mais il ne reconnaît pas la variable $ try.

Vous pouvez utiliser awk comme ceci:

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

… quelle propriété émet en sortie:

 input [7:0] a; dft_DW_mult_uns_1 mult_31 ( .a(a), .b(b), .product(reg0) ); 
  • Utilisez -v var="value" pour passer des variables de ligne de commande du shell à awk
  • Définir et réinitialiser la variable p lorsque vous rencontrez des balises de début ou de fin