我经常发现自己在动作中与模式进行相同的匹配,以访问输入记录的某些部分,例如
/^Compiled from \"(.*)\"$/ {
file_name = gensub("^Compiled from \"(.*)\"$", "\\1", "g");
print file_name;
}
Run Code Online (Sandbox Code Playgroud)
所以正则表达式匹配完成了两次.我有什么方法可以\\1在动作中访问而不再匹配?
我试图减少pattert匹配和额外的代码.
不幸的是,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)