如何在awk中提取行的第一个字母字符的索引

gam*_*yon 2 awk

如何在awk中提取行的第一个字母字符的索引?

我希望

echo 123XYZ | awk '{print index($1,"[:alpha:]")}' 
Run Code Online (Sandbox Code Playgroud)

将返回 4。

tha*_*isp 10

GNU awk 手册说内部不允许使用正则表达式index()

索引(在,查找)

[...]

对于 BWK awk 和 gawk,使用正则表达式常量进行查找是一个致命错误。其他实现允许它,只需将 regexp 常量视为表示“$0 ~ /regexp/”的表达式。(直流)


你可以使用match()

echo "123XYZ" | awk '{match($0,/[[:alpha:]]/); print RSTART}' 
4
Run Code Online (Sandbox Code Playgroud)

这将匹配第一个最左边的字母字符。在 a 之后match(),内置变量RSTARTRLENGTH包含匹配字符串的索引和长度,因此我们打印第一个。


注意: this:[:alpha:]是一类字符,不由自己定义一个正则表达式来匹配。为了使它的意思是“一个字母字符”,我们必须把它括起来[],像这样:[[:alpha:]]

来自man awk

字符类仅在字符列表括号内的正则表达式中有效。字符类由 [: 表示类的关键字和 :] 组成