awk从每一行中提取多个组

Adr*_*iuk 8 regex awk grouping

当模式在一行中多次匹配时,如何对所有匹配的组执行操作?

为了说明,我想搜索/Hello! (\d+)/并使用数字,例如,打印出来或将它们相加,以便输入

abcHello! 200 300 Hello! Hello! 400z3
ads
Hello! 0
Run Code Online (Sandbox Code Playgroud)

如果我决定将它们打印出来,我会期待它的输出

200
400
0
Run Code Online (Sandbox Code Playgroud)

小智 11

这是一个简单的语法,每个awk(nawk,mawk,gawk等)都可以使用它.

{
    while (match($0, /Hello! [0-9]+/)) {
        pattern = substr($0, RSTART, RLENGTH);
        sub(/Hello! /, "", pattern);
        print pattern;
        $0 = substr($0, RSTART + RLENGTH);
    }
}
Run Code Online (Sandbox Code Playgroud)