使用awk [:alnum:]正则表达式组的验证程序未按预期工作

时间:2019-02-11 14:14:03

标签: csv awk

我目前正在使用awk编码CSV验证器。这是代码示例:

awk 'BEGIN{FS=OFS=","} NF!=17{print "not enough fields"; exit}
!($1~/[[:alnum:]]$/) {print "1st field invalid"; exit}' npp_test.cs

但是alnum部分将不接受字母和数字字符。

因此,如果数据为“ t”,则程序将退出,而如果数据为“ 1”,则相同。但是,如果它是“ t1”,它将不会识别为有效。 我将如何使代码接受字母和数字数据的混合。

此外,最上面一行与实际字段数无关,实际上并不相关:)

1 个答案:

答案 0 :(得分:0)

如果您的环境在awk中不支持POSIX字符类,则可以在方括号表达式中使用显式字符范围:

!($1 ~ /^[A-Z0-9]{1,25}$/)

在这里

  • ^-匹配一行的开头
  • [A-Z0-9]{1,25}-匹配1至25个大写字母或数字
  • $-字符串的结尾。

注意:为避免排序规则出现任何问题,可以在LANG=C命令之前添加awk