Любой способ получить доступ к соответствующим группам в действии?
Я часто обнаруживаю, что выполняю такое же совпадение в действии, что и шаблон, чтобы получить доступ к некоторой части входной записи, например
/^Compiled from \"(.*)\"$/ {
file_name = gensub("^Compiled from \"(.*)\"$", "\\1", "g");
print file_name;
}
Таким образом, сопоставление с регулярным выражением выполняется дважды. Есть ли способ, которым я могу получить доступ \\1
в действии без сопоставления снова?
Я пытаюсь уменьшить количество совпадений и дополнительный код.
1 ответ
Решение
К сожалению, GAWK не имеет функции переноса sed
который использует пустой //
,
sed '/\(patt\)ern/ {s//new\1/}' inputfile
Тем не менее, вы можете радоваться, так как переменные были недавно изобретены, и они могут использоваться только для этой цели!
BEGIN {
pattern = "^Compiled from \"(.*)\"$"
}
$0 ~ pattern {
file_name = gensub(pattern, "\\1", "");
print file_name;
}