awk 不会在具有 match 的行中获得多个匹配项

kro*_*rop 3 awk

AWK 有 match(s, r [, a]) 函数,根据手册,该函数能够将所有出现的模式记录到数组“a”中:

...如果提供了数组 a,则清除 a,然后用 s 中与 r 中相应的带括号的子表达式匹配的部分填充元素 1 到 n。a 的第 0 个元素包含 s 中与整个正则表达式 r 匹配的部分。下标 a[n, "start"] 和 a[n, "length"] 分别提供每个匹配子字符串的字符串中的起始索引和长度。

我期望以下行:

echo 123412341234 | awk '{match($0,"1",arr); print arr[0] arr[1] arr[2];)'

打印 111

但事实上“匹配”会忽略除第一个匹配之外的所有其他匹配。

请有人告诉我用所有出现的“1”填充“arr”的正确语法是什么?

anu*_*ava 5

match只找到第一个匹配并停在那里。您将必须match在循环中运行,否则使用这种方式,我们对任何不是这样的东西使用分割输入1

echo '123412341234' | awk -F '[^1]+' '{print $1 $2 $3}'

111
Run Code Online (Sandbox Code Playgroud)

或者在 gnu-awk 中使用split

echo '123412341234' | awk -F '[^1]+' '{print $1 $2 $3}'

111
Run Code Online (Sandbox Code Playgroud)