awk:有没有办法访问行动中的匹配组?

awk:有没有办法访问行动中的匹配组?,awk,Awk,我经常发现自己在动作中与模式进行相同的匹配,以访问输入记录的某些部分,例如 /^Compiled from \"(.*)\"$/ { file_name = gensub("^Compiled from \"(.*)\"$", "\\1", "g"); print file_name; } 因此,regexp匹配要进行两次。是否有任何方法可以访问操作中的\\1,而无需再次匹配 我试图减少模式匹配和额外代码。不幸的是,GAWK没有使用空/的sed结转功能 sed '/\(patt

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

/^Compiled from \"(.*)\"$/ {
    file_name = gensub("^Compiled from \"(.*)\"$", "\\1", "g");
    print file_name;
}
因此,regexp匹配要进行两次。是否有任何方法可以访问操作中的
\\1
,而无需再次匹配


我试图减少模式匹配和额外代码。

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

sed '/\(patt\)ern/ {s//new\1/}' inputfile
然而,你可以高兴,因为变量最近被发明了,它们可以用于这个目的

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

似乎这里的回答是:@Slartibartfast,这很有帮助。我在发布之前没有发现这个问题,所以谢谢。尽管如此,根据答案,我必须使用
匹配($0…
),这有点难看,虽然不是真的。我已经在使用变量,但我接受它,因为它回答了我的问题。