【发布时间】:2011-02-09 05:14:39
【问题描述】:
这是我在简化场景中遇到的问题。
创建一些测试文件:
touch /tmp/test.xml
touch /tmp/excludeme.xml
touch /tmp/test.ini
touch /tmp/test.log
我有一个返回所有 XML 和 INI 文件的查找表达式:
[root@myserver] ~> find /tmp -name -prune -o -regex '.*\.\(xml\|ini\)'
/tmp/test.ini
/tmp/test.xml
/tmp/excludeme.xml
我现在想要一种修改此 -regex 的方法,以排除 excludeme.xml 文件包含在结果中。
我认为这应该可以通过使用/组合非消耗正则表达式 (?=expr) 与否定匹配 (?!expr) 来实现。不幸的是,我不能完全正确地获得命令的格式,所以我的尝试没有返回任何匹配项。这是我的尝试之一(我尝试了许多不同形式的不同转义!):
find /tmp -name -prune -o -regex '\(?=.*excludeme\.xml\).*\.\(xml\|ini\)'
我无法将命令分解为多个步骤(例如通过 grep -v 进行管道传输),因为 find 命令被假定为我们工具其他部分的输入。
【问题讨论】: