Любой способ получить доступ к соответствующим группам в действии?

Я часто обнаруживаю, что выполняю такое же совпадение в действии, что и шаблон, чтобы получить доступ к некоторой части входной записи, например

/^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;
}
Другие вопросы по тегам