Файлы представления без строк с определенной строкой

Поиск программы как tail или less которые позволяют мне просмотреть свои журналы без строк, которые содержат определенную строку. Например, просмотрите мой системный журнал без UFW ([UFW BLOCK]) строки ввода.

12
задан 1 August 2017 в 06:45

5 ответов

Опция инверсии соответствия шаблона -v для grep действительно полезно для этого:

grep -v 'UFW BLOCK' /var/log/syslog

Это покажет Вам всем строки, не содержащие UFW BLOCK. Как grep использует основные регулярные выражения по умолчанию, включение скобок заставит его искать любой из отдельных символов 'БЛОКА UFW' включая пространство. Вы, вероятно, закончите без вывода. Если необходимо удостовериться, что существуют скобки вокруг строки, любой выходит из них \[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
13
ответ дан 23 November 2019 в 03:31

Можно также использовать sed d команда для удаления строк с шаблоном от потока:

sed '/\[UFW BLOCK\]/d' /var/log/syslog

Мы выходим [] поскольку обычно они обозначают класс символов, имея в виду "соответствие что-либо внутри здесь"

5
ответ дан 23 November 2019 в 03:31

Можно использовать любой инструмент с редактированием возможностей. Вам уже дали использование решений grep и sed, вот несколько других вариантов. Все они могут легко быть переданы по каналу к less или more или что-либо еще.

  1. 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
    
  2. awk

    awk '!/\[UFW BLOCK\]/' file
    
5
ответ дан 23 November 2019 в 03:31

Можно использовать awk также:

awk '!/PATTERN/' log

Я использую его, когда у меня есть больше, чем одного "шаблона", и я не хочу использовать два grep как:

... | grep -v foo | grep -v bar

который синтаксис:

awk '!/PATTERN/ && !/PATTERN2/' log
2
ответ дан 23 November 2019 в 03:31

С less команда & опция возможно отфильтровать для отображения только желаемого подобранного шаблона как ниже,

& /PATTERN/

в Вашем случае, если Вы хотите строки фильтра с UFW BLOCK чтобы не сделать дисплея в выводе, Вы могли просто использовать &! как указано ниже:

&! /UFW BLOCK/
1
ответ дан 23 November 2019 в 03:31

Другие вопросы по тегам:

Похожие вопросы: