任何方式来访问匹配的群组?

时间:2012-04-20 21:12:12

标签: awk gawk

我经常发现自己在动作中与模式进行相同的匹配,以访问输入记录的某些部分,例如

/^Compiled from \"(.*)\"$/ {
    file_name = gensub("^Compiled from \"(.*)\"$", "\\1", "g");
    print file_name;
}

所以正则表达式匹配完成了两次。有没有办法可以在动作中访问\\1而不再匹配?

我正在尝试减少pattert匹配和额外代码。

1 个答案:

答案 0 :(得分:8)

不幸的是,GAWK没有使用空sed //的结转功能。

sed '/\(patt\)ern/ {s//new\1/}' inputfile

然而,你可以高兴,因为最近发明了变量,它们可以用于此目的!

BEGIN {
    pattern = "^Compiled from \"(.*)\"$"
}
$0 ~ pattern {
    file_name = gensub(pattern, "\\1", "");
    print file_name;
}