当前位置:  开发笔记 > 运维 > 正文

AWK - 我的正则表达式不会尊重案例

如何解决《AWK-我的正则表达式不会尊重案例》经验,为你挑选了1个好方法。

我正在运行Ubuntu 8.04,我的代码看起来像这样......

 for (i=1;i<=n;i++)
 {
  if (arr[i] ~ /^[A-Z]{2,4}$/) printf(arr[i])
 }

我很快发现没有--posix开关,{n}表达式在gawk中不起作用.一旦启用,表达式就可以工作,但是它与caseA insenitive匹配AAAA和aaaa.这里发生了什么?



1> jpalecek..:

表达本身对我有用:

dfs:~# gawk --posix '/^[A-Z]{2,4}$/ {print "Yes"}'
AAAA
Yes
AA
Yes
TT
Yes
tt
YY
Yes
yy

你的问题可能是由两件事引起的.您不小心设置了IGNORECASEawk变量或以其他方式转换为不区分大小写的操作(BTW IGNORECASE不起作用--posix,但确实如此--re-interval,这也启用了正则表达式中的大括号),或者它是区域设置整理顺序的典型问题(因为gawk确实如此)区域设置感知字符比较),这意味着小写字符在一些大写字符之间进行比较.从手册的相关部分引用:

许多语言环境按字典顺序对字符进行排序,在这些语言环境中,'[a-dx-z]'通常不等同于'[abcdxyz]'; 相反,它可能等于'[aBbCcDdxXyYz]',例如.要获得括号表达式的传统解释,可以通过将LC_ALL环境变量设置为值"C"来使用C语言环境.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有