Ответы:
Опция инверсии соответствия шаблона -vдля grepдействительно полезна для этого:
grep -v 'UFW BLOCK' /var/log/syslog
Это покажет вам все строки, не содержащие UFW BLOCK. Поскольку grepпо умолчанию используются базовые регулярные выражения, включение скобок заставит искать любой из отдельных символов «UFW BLOCK», включая пробел. Вы, вероятно, в конечном итоге без вывода. Если вам нужно убедиться, что вокруг строки есть скобки, либо избегайте их \[UFW BLOCK\], либо используйте -Fопцию grepвключения только фиксированных строк (спасибо Zanna и Steeldriver за советы по этому вопросу):
grep -Fv '[UFW BLOCK]' /var/log/syslog
Вы можете упростить просмотр, отправив вывод на пейджер, например less:
grep -v 'UFW BLOCK' /var/log/syslog | less
Или перенаправьте вывод в файл в вашем домашнем каталоге для последующего просмотра:
grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog
fgrepкоманду, которая эквивалентна grep -F.
Вы можете использовать любой инструмент с возможностями редактирования. Вы уже получили решения с использованием grepи sedвот несколько других вариантов. Все они могут быть легко переданы lessили moreили что-нибудь еще.
Perl
perl -ne 'print unless /\[UFW BLOCK\]/' /var/log/syslog
Так как это Perl, TIMTOWDI! ,
perl -pe '$_="" if /\[UFW BLOCK\]/' /var/log/syslog
perl -ne '/\[UFW BLOCK\]/ || print' /var/log/syslog
perl -ne 'print if !/\[UFW BLOCK\]/' /var/log/syslog
perl -ne '!/\[UFW BLOCK\]/ && print' /var/log/syslog
perl -ne '/\[UFW BLOCK\]/ ? "" : print' /var/log/syslog
AWK
awk '!/\[UFW BLOCK\]/' file
Вы также можете использовать awk:
awk '!/PATTERN/' log
Я использую его, когда у меня больше, чем один «шаблон», и я не хочу использовать два grepтипа:
... | grep -v foo | grep -v bar
какой синтаксис:
awk '!/PATTERN/ && !/PATTERN2/' log
grep -Ev "foo|bar"?
-eдля определения нескольких шаблонов. grep -v -e 'foo' -e 'bar'
С lessкомандованием &опцией можно отфильтровать , чтобы отобразить только нужный подходящий шаблон , как показано ниже,
& /PATTERN/
в вашем случае, если вы хотите, чтобы строки фильтра UFW BLOCKне отображались на выходе, вы можете просто использовать, &!как показано ниже:
&! /UFW BLOCK/
lessдает возможность фильтровать отображаемые строки после шаблона регулярных выражений. Вы можете использовать эту функцию, печатая с&последующим шаблоном, и вы можете отменить ее, введя&один.