Отрицательное сопоставление с использованием grep (строки соответствия, которые не содержат foo)



Я пытался разработать синтаксис для этой команды:



grep ! error_log | find /home/foo/public_html/ -mmin -60


или



grep '[^error_log]' | find /home/baumerf/public_html/ -mmin -60


мне нужно видеть все файлы, которые были изменены, за исключением имени error_log.



Я читал об этом здесь, но нашел только один not-регулярное выражение шаблон.

533   3  

3 ответов:

grep -v - ваш друг:

grep --help | grep invert  

- v, --invert-match select non-matching lines

также проверьте связанные -L (дополнение -l).

- L, --files-without-match только печатать имена файлов, не содержащие совпадений

вы также можете использовать awk для этих целей, так как это позволяет выполнять более сложные проверки в более ясном виде:

строки не содержащих foo:

awk '!/foo/'

строки, не содержащие ни одного foo, ни bar:

awk '!/foo/ && !/bar/'

строки, не содержащие ни одного foo, ни bar но содержащие либо foo2 или bar2:

awk '!/foo/ && !/bar/ && (/foo2/ || /bar2/)'

и так далее.

в вашем случае вы предположительно не хотите использовать grep, но вместо этого добавьте отрицательное предложение в команду find, например

find /home/baumerf/public_html/ -mmin -60 -not -name error_log

Если вы хотите включить подстановочные знаки в имя, вам придется их экранировать, например, чтобы исключить файлы с суффиксом .журнал:

find /home/baumerf/public_html/ -mmin -60 -not -name \*.log

Comments

    Ничего не найдено.