gpt4 book ai didi

regex - 在 Linux 中使用非消耗匹配查找正则表达式

转载 作者:太空狗 更新时间:2023-10-29 12:07:31 27 4
gpt4 key购买 nike

这是我在简化场景中遇到的问题。

创建一些测试文件:

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 命令被假定为我们工具其他部分的输入。

最佳答案

这会在 Linux 上执行您想要的操作:

find /tmp -name -prune -o -regex '.*\.\(xml\|ini\)' \! -regex '.*excludeme\.xml'

我不确定“!”运算符是 gnu find 独有的。

关于regex - 在 Linux 中使用非消耗匹配查找正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4928519/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com