我想选择一些与正则表达式匹配的文件.文件例如:
4510-88aid-50048-INA.txt
4510-88nid-50048-INA.txt
xxxx-05xxx-xxxxx-INA.txt
Run Code Online (Sandbox Code Playgroud)
我想要所有匹配此正则表达式的文件:
.*[\w]{4}-05(?!aid)[\w]{3}-[\w]{5}-INA\.txt
Run Code Online (Sandbox Code Playgroud)
在我看来,这必须是xxxx-05xxx-xxxxx-INA.txt上面的情况.使用像RegexTester这样的工具,一切都很完美.使用bash命令find -regex似乎不适合我.我的问题是,为什么?
我无法弄清楚,我正在使用:
find /some/path -regex ".*[\w]{4}-05(?!aid)[\w]{3}-[\w]{5}-INA\.txt" -exec echo {} \;
Run Code Online (Sandbox Code Playgroud)
但是什么都没有印出......有什么想法?
$ uname -a
Linux debmu838 2.6.5-7.321-smp #1 SMP Mon Nov 9 14:29:56 UTC 2009 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
我几乎与其他答案相同:Find 的-regexswitch 无法模拟 Perl 正则表达式中的所有内容,但是,您可以尝试以下方法...
看一下find2perl命令。该程序可以采用典型的 find 语句,并为您提供与之等效的 Perl 程序。我不相信-regex它被识别find2perl(它不在标准的Unix find中,而只在GNU find中),但你可以简单地使用-name,然后看到它生成的程序。从那里,您可以修改程序以在正则表达式中使用您想要的 Perl 表达式。最后,您将得到一个小的 Perl 脚本,它将找到您想要的文件目录。
否则,尝试使用-regextype posix-extended几乎匹配大多数Perl 正则表达式的表达式。您不能使用环顾四周,但您可能可以找到有用的东西。
根据find 手册页, find regex 使用每个默认的 emacs regex。根据http://www.regular-expressions.info/refflavors.html emacs 是 GNU ERE,它不支持环视。
您可以尝试不同的-regextype@l0b0 建议,但 Posix 风格似乎不支持此功能。
bash4 +和perl
ls /some/path/**/*.txt | perl -nle 'print if /^[\w]{4}-05(?!aid)[\w]{3}-[\w]{5}-INA\.txt/'
Run Code Online (Sandbox Code Playgroud)
你应该在你的.profile中 shopt -s globstar
| 归档时间: |
|
| 查看次数: |
5141 次 |
| 最近记录: |