Замечание о «есть эта нормальная» часть вопроса:
В общем, программное обеспечение с открытым исходным кодом выпускается гораздо чаще, чем коммерческое программное обеспечение. Кроме того, такая система, как Ubuntu, представляет собой большое созвездие «небольших» программных пакетов, которые работают вместе, чтобы обеспечить вам беспрепятственный пользовательский интерфейс. Многие из этих пакетов являются специализированными библиотеками кода, о которых вы, возможно, никогда не знаете, но в конечном итоге делаете то, что полезно для некоторых приложений конечного пользователя. Это один из определяющих символов программного обеспечения с открытым исходным кодом: вместо больших монолитных приложений у вас есть расширенная сеть зависимостей.
В системе, где я пишу это, у меня установлено более 4 000 пакетов, поэтому легко получить хотя бы одно обновление в день.
Опция инверсии соответствия шаблону -v для grep действительно полезна для этого:
grep -v 'UFW BLOCK' /var/log/syslog
Это покажет вам все строки, не содержащие UFW BLOCK. Поскольку grep использует стандартные регулярные выражения по умолчанию, включение скобок приведет к поиску любого из отдельных символов «UFW BLOCK», включая пробел. Вероятно, вы не получите выход. Если вам нужно убедиться, что вокруг строки есть скобки, либо сбегите их \[UFW BLOCK\], либо используйте опцию -F в grep, чтобы включить только фиксированные строки (спасибо Zanna и Steeldriver за советы по этому поводу): [ ! d1]
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
Опция инверсии соответствия шаблону -v для grep действительно полезна для этого:
grep -v 'UFW BLOCK' /var/log/syslog
Это покажет вам все строки, не содержащие UFW BLOCK. Поскольку grep использует стандартные регулярные выражения по умолчанию, включение скобок приведет к поиску любого из отдельных символов «UFW BLOCK», включая пробел. Вероятно, вы не получите выход. Если вам нужно убедиться, что вокруг строки есть скобки, либо сбегите их \[UFW BLOCK\], либо используйте опцию -F в grep, чтобы включить только фиксированные строки (спасибо Zanna и Steeldriver за советы по этому поводу): [ ! d1] 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
Опция инверсии соответствия шаблону -v для grep действительно полезна для этого:
grep -v 'UFW BLOCK' /var/log/syslog
Это покажет вам все строки, не содержащие UFW BLOCK. Поскольку grep использует стандартные регулярные выражения по умолчанию, включение скобок приведет к поиску любого из отдельных символов «UFW BLOCK», включая пробел. Вероятно, вы не получите выход. Если вам нужно убедиться, что вокруг строки есть скобки, либо сбегите их \[UFW BLOCK\], либо используйте опцию -F в grep, чтобы включать только фиксированные строки (спасибо Zanna и Steeldriver за советы по этому поводу): [ ! d1] 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
Вы также можете использовать команду sed d для удаления строк с шаблоном из потока:
sed '/\[UFW BLOCK\]/d' /var/log/syslog
Мы убегаем [], как обычно, обозначают класс символов, что означает «что-то внутри»
Вы можете использовать любой инструмент с возможностями редактирования. Вы уже получили решения, используя grep и sed, вот несколько других вариантов. Все это можно легко передать на less или more или что-нибудь еще.
Perlperl -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
С помощью опции less команды less можно отфильтровать, чтобы отобразить только желаемый согласованный шаблон, как показано ниже,
& /PATTERN/
в вашем случае, если вы хотите, чтобы линии фильтра с UFW BLOCK были на дон 't выводить на выходе, вы можете просто использовать &!, как показано ниже:
&! /UFW BLOCK/
Вы также можете использовать awk:
awk '!/PATTERN/' log
Я использую его, когда у меня есть более одного «шаблона», и я не хочу использовать два grep:
... | grep -v foo | grep -v bar
, который синтаксис:
awk '!/PATTERN/ && !/PATTERN2/' log
Вы можете использовать любой инструмент с возможностями редактирования. Вы уже получили решения, используя grep и sed, вот несколько других вариантов. Все это можно легко передать на less или more или что-нибудь еще.
Perlperl -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
Вы также можете использовать команду sed d для удаления строк с шаблоном из потока:
sed '/\[UFW BLOCK\]/d' /var/log/syslog
Мы убегаем [], как обычно, обозначают класс символов, что означает «что-то внутри»
С помощью опции less команды less можно отфильтровать, чтобы отобразить только желаемый согласованный шаблон, как показано ниже,
& /PATTERN/
в вашем случае, если вы хотите, чтобы линии фильтра с UFW BLOCK были на дон 't выводить на выходе, вы можете просто использовать &!, как показано ниже:
&! /UFW BLOCK/
Вы также можете использовать awk:
awk '!/PATTERN/' log
Я использую его, когда у меня есть более одного «шаблона», и я не хочу использовать два grep:
... | grep -v foo | grep -v bar
, который синтаксис:
awk '!/PATTERN/ && !/PATTERN2/' log
Вы можете использовать любой инструмент с возможностями редактирования. Вы уже получили решения, используя grep и sed, вот несколько других вариантов. Все это можно легко передать на less или more или что-нибудь еще.
Perlperl -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
Вы также можете использовать команду sed d для удаления строк с шаблоном из потока:
sed '/\[UFW BLOCK\]/d' /var/log/syslog
Мы убегаем [], как обычно, обозначают класс символов, что означает «что-то внутри»
С помощью опции less команды less можно отфильтровать, чтобы отобразить только желаемый согласованный шаблон, как показано ниже,
& /PATTERN/
в вашем случае, если вы хотите, чтобы линии фильтра с UFW BLOCK были на дон 't выводить на выходе, вы можете просто использовать &!, как показано ниже:
&! /UFW BLOCK/