我需要查找以三个小写字母开头的文件,但由于某种原因,我遇到了不希望的不区分大小写的行为。
我将 find 与 -regex 选项一起使用,但它甚至找到以大写字母开头的文件。
$ find . -regextype posix-egrep -regex '.*/[a-z]{3}\w+\.abc'
./TTTxxx.abc
./tttyyy.abc
打印结果与:
$ find . -regextype posix-egrep -regex '.*/[A-Z]{3}\w+\.abc'
./TTTxxx.abc
./tttyyy.abc
如果我不使用一系列字符,而是使用单个字符,则将作为敏感字符,仅打印小写文件。
find . -regextype posix-egrep -regex '.*/[t]{3}\w+\.abc'
./tttyyy.abc
我尝试过使用不同的正则表达式类型,结果是相同的。
此外,egrep 似乎可以工作:
find . -regextype posix-egrep -regex '.*/.+\.abc' | egrep '/[a-z]\w+\.abc'
./tttyyy.abc
为什么使用字符范围时“find -regex”不区分大小写?
Note:我需要使用 find 因为我需要 -exec 选项。
非常感谢。
根据为什么 [A-Z] 在 bash 中匹配小写字母? https://unix.stackexchange.com/questions/227070/why-does-a-z-match-lowercase-letters-in-bash,排序规则是这里的问题:
与语言环境(例如 en_US)的标准排序规则具有以下顺序:
aAbBcC...xXyYzZ
Between a
and z
(in [a-z]
) 均为大写字母,除了Z
。
之间A
and Z
(in [A-Z]
) 均为小写字母,除了a
.
因此,您需要显式列出所有小写字母或更改排序规则:$ export LC_COLLATE=C
并使用标准[a-z]
.
[...]{3}\w\.abc
- 这个模式,在哪里[...]
is [a-z]
或列出的小写字母,将为您提供文件名。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)