any way to access the matched groups in action? [duplicate]

扶醉桌前 提交于 2019-12-22 04:57:18

问题


I often find myself doing the same match in the action as the pattern, to access some part of the input record, e.g.

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

So the regexp matching is done twice. Is there any way I can access \\1 in the action without matching again?

I am trying to both reduce on pattert matching and extra code.


回答1:


Unfortunately, GAWK, doesn't have the carry-forward feature of sed which uses an empty //.

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

However, you can rejoice since variables have recently been invented and they can be used for just this purpose!

BEGIN {
    pattern = "^Compiled from \"(.*)\"$"
}
$0 ~ pattern {
    file_name = gensub(pattern, "\\1", "");
    print file_name;
}


来源:https://stackoverflow.com/questions/10253616/any-way-to-access-the-matched-groups-in-action

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!