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