tail
やless
などのプログラムを検索すると、特定の文字列を含む行なしでログを表示できます。たとえば、UFW([UFW BLOCK]
)エントリ行なしでsyslogを表示します。
パターンマッチの反転オプション-v
for grep
は、これに非常に役立ちます。
grep -v 'UFW BLOCK' /var/log/syslog
これにより、UFW BLOCK
を含まないすべての行が表示されます。 grep
はデフォルトで基本的な正規表現を使用するため、角かっこを含めると、スペースを含む 'UFW BLOCK'の個々の文字が検索されます。おそらく出力なしで終わるでしょう。文字列を角かっこで囲む必要がある場合は、\[UFW BLOCK\]
をエスケープするか、grep
の-F
オプションを使用して、固定文字列のみを含めます(ありがとう 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
sed
のd
コマンドを使用して、パターンから行をストリームから削除することもできます。
sed '/\[UFW BLOCK\]/d' /var/log/syslog
[]
をエスケープします。通常、これらは文字クラスを示します。つまり、「ここにあるものに一致する」という意味です。
編集機能を備えた任意のツールを使用できます。既に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
複数の「パターン」があり、次のような2つのgrep
を使用したくない場合に使用します。
... | grep -v foo | grep -v bar
構文は次のとおりです。
awk '!/PATTERN/ && !/PATTERN2/' log
less
コマンドの&
オプションを使用すると、以下のようにフィルタリングして、必要な一致パターンのみを表示できます。
& /PATTERN/
あなたの場合、UFW BLOCK
を含むフィルター行を出力に表示したくない場合は、以下のように&!
を使用できます。
&! /UFW BLOCK/