使用正则表达式查找bash不区分大小写

时间:2018-08-07 12:42:54

标签: regex bash unix find

我需要找到以三个小写字母开头的文件,但是由于某种原因,我遇到了不希望的不区分大小写的行为。 我正在使用带有-regex选项的find,但是它甚至可以找到以大写字母开头的文件。

$ 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

为什么使用char范围时“ find -regex”不区分大小写?

注意:,我需要使用find命令,因为我需要使用-exec选项。

非常感谢。

1 个答案:

答案 0 :(得分:0)

根据Why does [A-Z] match lowercase letters in bash?,排序规则是这里的问题:

  

带有语言环境(例如en_US)的标准排序规则具有以下顺序:

     

aAbBcC...xXyYzZ

     

az之间(在[a-z]中)都是大写字母,但Z除外。   在AZ之间(在[A-Z]中),除了a以外的所有小写字母。

因此,您需要显式列出所有小写字母或更改排序规则: $ export LC_COLLATE=C并使用标准的[a-z]

[...]{3}\w\.abc-这种模式,其中[...][a-z]或列出的小写字母,将为您提供文件名。