unix找到带有模式的正则表达式而不是以另一种模式结束

时间:2018-05-16 14:59:19

标签: regex unix find

我搜索SO以寻找可能给我这个简单答案的内容,它似乎是herehere(在众多中),但我根本无法让它起作用。

我有像

这样的文件
12_pattern1.yyy_zzz #find
13_pattern1.xxx.pattern2_xx 
12_yy_pattern1:xxx
14_pattern1.xxx_pattern2.xxx #find
12_xxx_zzz.yyy.xxx
14_pattern1.xxx.yyy #find

我需要找到并删除以1214开头的文件,此后立即生成_pattern1,不要以pattern2结尾。

我尝试了find . -regex ".*/\(12_\|14_\)pattern1.*[^pattern2$]" -exec rm -f {} \;

我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

这样的事情怎么样:

find . -regex "^\(12_\|14_\)pattern1.*" -not -regex "*.pattern2$"

答案 1 :(得分:1)

find命令支持正则表达式的posix-*种风格。这意味着您无法使用find进行此操作。但是,如果您可以使用grep,那么您可以轻松地执行此操作(但需要两个工具的帮助):

find . | grep -P '(14|12)_pattern1[^/]*$(?<!pattern2)'