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
…