0 awk
我想测试脚本参数是否仅由字母组成。这是脚本:
BEGIN {
VALUE=ARGV[1];
if (VALUE ~ /[A-Za-z]/) {
print VALUE " : Ok only letters";
}
print VALUE;
}
Run Code Online (Sandbox Code Playgroud)
似乎它匹配每个字符串至少有一个字母:
tchupy@rasp:~$ awk -f s.awk file 111
value = 111
tchupy@rasp:~$ awk -f s.awk file @@@
value = @@@
tchupy@rasp:~$ awk -f s.awk file aaa
aaa : Ok only letters
value = aaa
tchupy@rasp:~$ awk -f s.awk file 1a1
1a1 : Ok only letters
value = 1a1
tchupy@rasp:~$ awk -f s.awk file a1a
a1a : Ok only letters
value = a1a
tchupy@rasp:~$ awk -f s.awk file 1@1
value = 1@1
Run Code Online (Sandbox Code Playgroud)
我尝试使用match()函数,但是当我尝试使用 [A-Za-z] 正则表达式时,在 [ 处或附近出现语法错误。
谢谢
如果变量包含至少一个来自您的字符类的字符,则您的测试为真。要测试变量是否仅包含字符类中的字符,您需要从^
脚本的开头 ( ) 到结尾进行匹配:
BEGIN {
VALUE=ARGV[1];
if (VALUE ~ /^[A-Za-z]+$/) {
print VALUE " : Ok only letters";
}
print VALUE;
}
Run Code Online (Sandbox Code Playgroud)
或者更简洁:
BEGIN {
print ARGV[1] ": " (ARGV[1] ~ /^[A-Za-z]+$/ ? "OK" : "BAD")
}
Run Code Online (Sandbox Code Playgroud)