7

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

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

所以正则表达式匹配进行了两次。有什么方法可以\\1在不匹配的情况下访问操作?

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

4

1 回答 1

9

不幸的是,GAWK 没有sed使用空//.

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

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

BEGIN {
    pattern = "^Compiled from \"(.*)\"$"
}
$0 ~ pattern {
    file_name = gensub(pattern, "\\1", "");
    print file_name;
}
于 2012-04-20T23:25:46.523 回答