Какая самая компактная версия «соответствует всем, кроме этих строк» ​​в оболочке или регулярном выражении? - PullRequest
4 голосов
/ 22 марта 2009

Linux: я хочу перечислить все файлы в каталоге и в его подкаталогах, кроме некоторых строк. Для этого я использовал комбинацию поиска / grep / shell. Например, я хочу перечислить все файлы, кроме тех, которые находятся в каталогах

./bin
./lib
./resources

Я понимаю, что это можно сделать, как показано в этом вопросе и в этом другом . Но обе версии не решают дело «все, кроме этой модели» в общих чертах.

Кажется, что для фильтрации результатов гораздо проще использовать условное выражение, но мне интересно, есть ли какой-нибудь компактный и элегантный способ описать это в регулярном выражении или в расширенном глобализации оболочки?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 22 марта 2009

yourcommand | egrep -v "pattern1|pattern2|pattern3"

6 голосов
/ 22 марта 2009

Использовать чернослив вариант поиска.

find . -path './bin' -prune -o -path './lib' -prune -o -path './resources' -prune -o «rest of your find params» 
3 голосов
/ 22 марта 2009

При включенной настройке bash extglob вы можете исключить файлы с ! в шаблоне с подстановочными знаками . Некоторые примеры:

  • Все, кроме bin, lib и ресурсов

    shopt -s extglob
    ls -Rl !(bin|lib|resources)
    
  • Все с i, кроме bin и lib

    ls -Rl !(bin|lib|!(*i*))
    

    (все, что имеет i в нем такое же, как и все , за исключением вещей, которые не имеют i в них.)

...