Отрицательное сопоставление с использованием 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-регулярное выражение шаблон.
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