特定の文字列を含む行のないファイルを表示する


12

tailまたはのようなプログラムを検索すると、less特定の文字列を含む行なしでログを表示できます。たとえば、UFW([UFW BLOCK])エントリ行なしでsyslogを表示します。


この機能を使用して問題の正確な説明に対する解決策を提供するのは簡単ではありませんがless、正規表現パターンの後に表示された行をフィルタリングする可能性を提供することに興味があるかもしれません。この機能を使用&するには、続けてパターンを入力し、入力する&だけで元に戻すことができます。
アーロン

回答:


13

パターンマッチ反転オプション-vについてはgrep、このために本当に便利です。

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

これにより、を含まないすべての行が表示されますUFW BLOCKgrepデフォルトで使用する基本的な正規表現、括弧を含めることは、それがスペースを含む「UFW BLOCK」の個々の文字のいずれかを探しになります。おそらく出力なしで終わるでしょう。文字列の周りに括弧があることを確認する必要がある場合は、それらをエスケープするか、固定文字列のみを含めるオプションを\[UFW BLOCK\]使用し-Fますgrep(このについてはZannaSteeldriverに感謝します):

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

2
fgrep相当するコマンドを使用することもできgrep -Fます。
Tulainsコルドバ

2
@TulainsCórdovagrepの男は、「egrepまたはfgrepのいずれかとしての直接呼び出しは非推奨ですが、それらに依存する履歴アプリケーションを変更せずに実行できるようにするために提供されています」と言います。これらのコマンドを使用してのベストプラクティスではありません彼らはこれまで、この非推奨に基づいて行動するかどうかはわからないが、私は推測する
アーロン・

5

seddコマンドを使用して、ストリームからパターンのある行を削除することもできます。

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

[]通常、これらは文字クラスを表し、「ここにあるものに一致する」という意味でエスケープします


5

編集機能を備えた任意のツールを使用できます。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
    

2

あなたも使用awkできます:

awk '!/PATTERN/' log

複数の「パターン」があり、次のgrepような2つのパターンを使用したくない場合に使用します。

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

構文は次のとおりです。

awk '!/PATTERN/ && !/PATTERN2/' log

「複数の「パターン」があり、2つのgrepを使用したくないときに使用します」------ grep -Ev "foo|bar"
αғsнιη

-e複数のパターンを定義するためにも使用できます。grep -v -e 'foo' -e 'bar'
17

@AFSHIN(私のコメントがどのように削除されるのかわからない)、私は論理的なものではなく、または;)
Ravexina

1

lessコマンドの&オプションには、以下のように唯一の希望マッチしたパターンを表示するようにフィルタリングすることが可能です

& /PATTERN/

あなたの場合、フィルタ行をUFW BLOCK出力に表示したくない場合は、次のように単純に使用でき&!ます:

&! /UFW BLOCK/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.