我需要一种方法来匹配目录中的文件名.
例如,我有三个文件:
CAt_DoG_ZebRa.TXT MOUSE_lion_deer_BIRD.TXT fIsh_biRD_LION.TXT
我不是任何正则表达式专家,但我之前在SnapLogic和Pentaho中使用过类似的东西:
(?i).*(?=.*bird)(?=.*lion).*.TXT
上面的内容将匹配包含单词’bird’和’lion’的所有文件名,其中case被忽略,单词的顺序无关紧要.很强大!所以它会匹配这两个:
MOUSE_lion_deer_BIRD.TXT fIsh_biRD_LION.TXT
我尝试了上面的很多变化与find和grep一起无济于事.例如:
find . -regex ".*/(?i).*(?=.*bird)(?=.*lion).*.TXT"
以上查找与任何内容都不匹配.
谁能推荐一种方法来做到这一点?
解决方法
# ls asdafsdfdBirdasfdfd.txt dasdbirdbfdgdlionb.txt fgdfLionqweBirdaqw.txt # ls | /usr/gnu/bin/grep -i -E '.*(bird.*lion|lion.*bird).*\.txt' dasdbirdbfdgdlionb.txt fgdfLionqweBirdaqw.txt
一个技巧:当你使用向前看或者向后看写一些正则表达式时,怀疑它,并且要么改变另一种方式来编写它,要么考虑正则表达式是否适合这个问题的工具.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。