Linux $ FIND和Unicode字符的十六进制表示法'范围?

时间:2014-07-19 12:29:33

标签: regex unicode find cjk

我无法让unicode hex notation在linux $find实用程序及其-regex功能中运行。有我的情况。

给定一个包含5个文件的文件夹:

./cmn-我.flac
./cmn-的.flac
./cmn-三.flac
./cmn-a.flac
./cmn-b.flac

要查找包含CJK字符的文件,我尝试了以下操作:

find ./ -regex "./cmn-.\.flac"                     #Find *ALL* files "*.txt", not what I want.
find ./ -regex "./cmn-[\x4e00-\x9fa5]\.flac"       #fails
find ./ -regex "./cmn-[\u4e00-\u9fa5]\.flac"       #fails
find ./ -regex "./cmn-[\x{4e00}-\x{9fa5}]\.flac"   #fails
find ./ -regex "./cmn-[\u{4e00}-\u{9fa5}]\.flac"   #fails
find ./ -regex "./cmn-[\U0004e00-\U0009fa5]\.flac"  #fails

没有成功。

如何使用find ./ -regex "[myRegEx]"unicode hex notation正则表达式查找包含CJK字符的文件?

1 个答案:

答案 0 :(得分:1)

正如我在What regex to find files with CJK characters using find command? find中解释的那样,使用POSIX正则表达式并不支持这种模式。

说明

查看-regex-type选项,我只看到POSIX正则表达式类型:emacs(默认),posix-awkposix-basicposix-egrepposix-extended)。

doesn't support custom hex range definition (将 Perl POSIX 进行比较)。

解决方案

grep确实有实验性 -P--perl-regexp选项,您可以使用此类模式:

  find . -name 'cmn-*.flac' -print | grep -P '[\x4e00-\x9fa5]'

请参阅command explanation