在linux中使用find
命令时,可以添加一个使用emacs regualr表达式匹配的-regex
标志。
我希望找到除.jar
个文件和.ear
文件以外的所有文件。在这种情况下,正则表达式是什么?
由于
答案 0 :(得分:36)
这里不需要正则表达式。您可以将find
与-name
和-not
选项一起使用:
find . -not -name "*.jar" -not -name "*.ear"
上述更简洁(但不太可读)的版本是:
find . ! \( -name "*.jar" -o -name "*.ear" \)
答案 1 :(得分:13)
编辑:新方法:
由于POSIX正则表达式不支持环视,因此您需要否定匹配结果:
find . -not -regex ".*\.[je]ar"
之前发布的答案使用了lookbehind,因此在这里不起作用,但这里是为了完整性:
.*(?<!\.[je]ar)$
答案 2 :(得分:5)
find . -regextype posix-extended -not -regex ".*\\.(jar|ear)"
这将完成这项工作,我个人认为它比其他一些解决方案更清晰。不幸的是,-regextype是必需的(混乱了一个简单的命令)以使捕获组工作。
答案 3 :(得分:0)
在这种情况下使用正则表达式听起来像是一种过度杀戮(你可以检查名称是否以某些东西结束)。我不确定emacs的语法,但是这样的东西应该足够通用才能工作:
\.(?!((jar$)|(ear$)))
即。找到一个点(。)后面没有结束($)“jar”或(|)“ear”。