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

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

如何在 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(),内置变量RSTARTRLENGTH包含匹配字符串的索引和长度,因此我们打印第一个。


注意:This:[:alpha:]是一类字符,不通过其自己定义正则表达式来匹配。为了使其表示“一个字母字符”,我们必须将其括在 中[],如下所示:[[:alpha:]]

man awk

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

相关内容