Regex 使用'find'命令查找带有CJK字符的文件的正则表达式是什么?

Regex 使用'find'命令查找带有CJK字符的文件的正则表达式是什么?,regex,ubuntu,terminal,find,cjk,Regex,Ubuntu,Terminal,Find,Cjk,我要查找的文件的格式是cmn-我.flac,其中CJK字符是可变的 使用find命令,我应该使用什么regexp来查找名称中包含单个CJK字符的所有文件? 提示: 以下regexp查找所有文件,包括带有和不带有CJK字符的文件: find ./ -regex '.*\..*' # ex: cmn-我.flac 然后: find ./ -regex "cmn-.*[\x4e00-\x9fa5]*\.flac" # the `-` breaks => fails find ./ -

我要查找的文件的格式是
cmn-我.flac,其中CJK字符是可变的

使用
find
命令,我应该使用什么regexp来查找名称中包含单个CJK字符的所有文件?


提示: 以下regexp查找所有文件,包括带有和不带有CJK字符的文件:

find ./ -regex '.*\..*'  # ex: cmn-我.flac
然后:

find ./ -regex "cmn-.*[\x4e00-\x9fa5]*\.flac"   # the `-` breaks => fails 
find ./ -regex ".*[\x4e00-\x9fa5]*\.flac"       # finds with n CJK characters => we get closer!
find ./ -regex ".*[\x4e00-\x9fa5]{1}\.flac"     # the `{1}` breaks => fails. 
find ./ -regex ".*[\x4e00-\x9fa5]?\.flac"       # the `?` breaks => fails. 
如何使其工作?

  • 正则表达式中有一个错误,在CJK匹配部分之外。要匹配的文件格式为

    cmn-我.flac

    但是相当于

    /cmn-我.flac

  • 以下命令完全有效,匹配
    /cmn-*.flac
    ,其中
    *
    是任何单个字符,包括CJK

    find./-regex./cmn-.\.flac”

  • 以下操作完全有效,匹配
    /cmn-*.flac
    ,其中
    *
    是任何单个CJK字符

    >


  • 我认为您的方法是正确的,需要更多地查看(例如,
    -regextype

    无法复制
    查找
    的版本 首先,确保检查您正在使用的
    find
    的哪个版本,实现之间存在一些差异:

    find --version
    
    给出:

    解释 查看
    -regex-type
    选项,我只看到
    POSIX
    正则表达式类型:
    emacs
    (默认)、
    POSIX-awk
    POSIX-basic
    POSIX-egrep
    POSIX-extended


    哪个(将Perl与POSIX进行比较)。

    您是否尝试过作为
    的解决方法?
    添加捕获组,如
    ([\x4e00-\x9fa5])?
    @Fede:在这里不起作用。和你?(该
    *
    可能有问题,因为它包含CJK字符)@Hugolpz请提供更多数据进行测试。在您使用bash globbing机制时,您可以尝试
    而不是
    *
    来匹配单个字符:我也得到了v.4.4.2。
    find --version
    
    find (GNU findutils) 4.4.2
    …