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

Mis*_*ble 7 awk gawk

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

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

所以正则表达式匹配完成了两次.我有什么方法可以\\1在动作中访问而不再匹配?

我试图减少pattert匹配和额外的代码.

Pau*_*ce. 8

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

sed '/\(patt\)ern/ {s//new\1/}' inputfile
Run Code Online (Sandbox Code Playgroud)

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

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