如何在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()
,内置变量RSTART
并RLENGTH
包含匹配字符串的索引和长度,因此我们打印第一个。
注意: this:[:alpha:]
是一类字符,不由自己定义一个正则表达式来匹配。为了使它的意思是“一个字母字符”,我们必须把它括起来[]
,像这样:[[:alpha:]]
。
来自man awk
:
字符类仅在字符列表括号内的正则表达式中有效。字符类由 [: 表示类的关键字和 :] 组成