Unix найти регулярное выражение с шаблонами, а не заканчивается другим шаблоном - PullRequest
0 голосов
/ 16 мая 2018

Я ищу что-то, что могло бы дать мне этот простой ответ, и кажется, что здесь и здесь (среди многих), но я просто не могу заставить его работать.

У меня есть файлы типа

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

Мне нужно найти и удалить файлы, которые начинаются с 12 или 14, имеют _pattern1 сразу после этого и НЕ заканчиваются pattern2.

Я что-то пробовал вместе find . -regex ".*/\(12_\|14_\)pattern1.*[^pattern2$]" -exec rm -f {} \;

Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018
Команда

find поддерживает posix-* разновидностей для регулярных выражений. Это означает, что вы не можете сделать это просто с find. Однако, если бы вы могли использовать grep, вы могли бы сделать это легко (но с помощью двух инструментов):

find . | grep -P '(14|12)_pattern1[^/]*$(?<!pattern2)'
0 голосов
/ 16 мая 2018

Как насчет этого:

find . -regex "^\(12_\|14_\)pattern1.*" -not -regex "*.pattern2$"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...