gawk正则表达式的模式

时间:2016-09-28 12:31:26

标签: bash awk gawk

我正在尝试使用gawk匹配以下表达式的模式:

static char *nm = "This is a test with many characters like $@#^&";

模式如下:

1. Line starts with static
2. 0 or more number of characters including whitespaces
3. char
4. 0 or more number of characters including whitespaces
5. =
6. 0 or more number of characters including whitespaces
7. "
8. 0 or more number of characters including whitespaces
9. "
10. 0 or more number of characters including whitespaces
11. ;

我正在尝试gawk /^static.*char.*=.*\",*\";"/{print} 我试图在第一个匹配的模式之后插入包含“bbbbb”的行,尝试如下:

   gawk '1; $1==nm1 && ++a==1 {print nm2}' nm1="^static.*char.*=.*\",*\";" nm2="bbbbb"  "aa"

如果再出现静态字符* nm =“这是一个包含许多字符的测试,例如$ @#^&”;这将保持原样。

请帮忙。

1 个答案:

答案 0 :(得分:1)

$1==nm1不会应用正则表达式,因为它只会在$1上执行字符串相等测试而不是整个记录。

您可以使用此awk命令:

awk -v nm2="bbbbb" '1; !p && /^static.*char.*=.*"[^"]*";/{p++; print nm2}' file

如果要使用参数传递正则表达式,请使用:

awk -v nm2="bbbbb" -v nm1='^static.*char.*=.*"[^"]*";' '1; !p && $0 ~ nm1{p++; print nm2}' file