如何在 awk 中提取行的第一个字母字符的索引?
我本来希望
echo 123XYZ | awk '{print index($1,"[:alpha:]")}'
将返回 4。
答案1
GNU awk 手册说里面不允许使用正则表达式index()
:
索引(在,查找)
[...]
对于 BWK awk 和 gawk,使用正则表达式常量进行查找是一个致命错误。其他实现允许这样做,只需将 regexp 常量视为表示“$0 ~ /regexp/”的表达式。 (直流)
你可以使用match()
:
echo "123XYZ" | awk '{match($0,/[[:alpha:]]/); print RSTART}'
4
这将匹配第一个最左边的字母字符。在 a 之后match()
,内置变量RSTART
和RLENGTH
包含匹配字符串的索引和长度,因此我们打印第一个。
注意:This:[:alpha:]
是一类字符,不通过其自己定义正则表达式来匹配。为了使其表示“一个字母字符”,我们必须将其括在 中[]
,如下所示:[[:alpha:]]
。
从man awk
:
字符类仅在字符列表括号内的正则表达式中有效。字符类由 [:、表示类的关键字和 :] 组成