0 ubuntu awk case-sensitive case-insensitive gawk
我正在运行Ubuntu 8.04,我的代码看起来像这样......
for (i=1;i<=n;i++)
{
if (arr[i] ~ /^[A-Z]{2,4}$/) printf(arr[i])
}
Run Code Online (Sandbox Code Playgroud)
我很快发现没有--posix开关,{n}表达式在gawk中不起作用.一旦启用,表达式就可以工作,但是它与caseA insenitive匹配AAAA和aaaa.这里发生了什么?
表达本身对我有用:
dfs:~# gawk --posix '/^[A-Z]{2,4}$/ {print "Yes"}'
AAAA
Yes
AA
Yes
TT
Yes
tt
YY
Yes
yy
Run Code Online (Sandbox Code Playgroud)
你的问题可能是由两件事引起的.您不小心设置了IGNORECASEawk变量或以其他方式转换为不区分大小写的操作(BTW IGNORECASE不起作用--posix,但确实如此--re-interval,这也启用了正则表达式中的大括号),或者它是区域设置整理顺序的典型问题(因为gawk确实如此)区域设置感知字符比较),这意味着小写字符在一些大写字符之间进行比较.从手册的相关部分引用:
许多语言环境按字典顺序对字符进行排序,在这些语言环境中,'[a-dx-z]'通常不等同于'[abcdxyz]'; 相反,它可能等于'[aBbCcDdxXyYz]',例如.要获得括号表达式的传统解释,可以通过将LC_ALL环境变量设置为值"C"来使用C语言环境.
| 归档时间: |
|
| 查看次数: |
929 次 |
| 最近记录: |