私は現在、いくつかの問題を探すために、多くの見慣れないログを調べています。最初に見たファイルはEvents.logで、less
に少なくとも3つのページが表示されます。これらのページは、同じイベントをさまざまなタイミングで表示しているように見えます。かなり害のないイベントです。このイベントを除外したいのですが、現在less
を終了して次のようなことをしています
grep -v "event text" Events.log | less
これにより、他にも多くの一般的で興味のないイベントが発生しますが、これらも除外したいと思います。できる方法はありますかgrep -v
inside of less
?する必要があるよりも
egrep -v "event text|something else|the other thing|foo|bar" Events.log | less
これは、あらゆる種類のログファイルを見るときに便利な機能だと思います。less
がツールではない場合、私が求める品質の別のものはありますか? less
が組み込まれたgrep
スタイルのビューアです。
less
には非常に強力なパターンマッチングがあります。 man page から:
&pattern
pattern
に一致する行のみを表示します。pattern
に一致しない行は表示されません。pattern
が空の場合(&
を入力した直後に ENTER)、すべてのフィルタリングがオフになり、すべての行が表示されます。フィルタリングが有効になっている間は、ファイルの一部の行が非表示になっている可能性があることを示すために、プロンプトの先頭にアンパサンドが表示されます。
/
コマンドのように、特定の文字は特殊です†:
^N
または!
pattern
と一致しない行のみを表示します。^R
正規表現のメタ文字を解釈しないでください。つまり、単純なテキスト比較を行います。
____________
†pattern
の先頭に入力した場合、特定の文字は特殊です。pattern
の一部になるのではなく、検索のタイプを変更します。
(もちろん^N
と^R
は Ctrl+N そして Ctrl+R、それぞれ。)
したがって、たとえば、&dns
は、パターンdns
に一致する行のみを表示し、&!dns
は、それらの行を除外(除外)して、パターンに一致しない行のみを表示します。 。
/
コマンドの説明では、
pattern
は、システムが提供する正規表現ライブラリによって認識される正規表現です。
そう
ð[01]
は、eth0
またはeth1
を含む行を表示します&arp.*eth0
は、arp
の後にeth0
が続く行を表示します&arp|dns
は、arp
またはdns
を含む行を表示しますまた、!
は上記のいずれでも反転できます。したがって、質問の例で使用するコマンドは次のとおりです。
&!event text|something else|the other thing|foo|bar
また、検索には/pattern
および?pattern
を使用します(次へ/前へ移動するにはn
/N
)。
orion's answer に基づいて、 less(1)
のマニュアルページ を説明します
/pattern
ファイルを前方に検索します N-
pattern
を含む行。 N†デフォルトは1です。pattern
は、システムが提供する正規表現ライブラリによって認識される正規表現です。検索は表示される2行目から始まります(ただし、これを変更する-a
および-j
optionsを参照してください)。
pattern
の先頭に入力した場合、特定の文字は特殊です。pattern
の一部になるのではなく、検索のタイプを変更します。
^N
または!
pattern
と一致しない行を検索します。^E
または*
複数のファイルを検索します。つまり、一致が見つからずに検索が現在のファイルの終わりに達した場合、検索はコマンドラインリストの次のファイルで続行されます。
^F
または@
現在画面に表示されているものや
-a
または-j
optionsの設定に関係なく、コマンドラインリストのFIRSTファイルの最初の行から検索を開始します。^K
現在の画面で
pattern
に一致するテキストを強調表示しますが、最初の一致(現在の位置を保持)には移動しません。^R
正規表現のメタ文字を解釈しないでください。つまり、単純なテキスト比較を行います。
____________
†コマンドの前に10進数を付けることができます。 N説明で…
(もちろん^N
や^E
などは、 Ctrl+N そして Ctrl+E、など)
&pattern
と/pattern
はうまく連携していることがわかりました。たとえば、コマンド
&!arp|dns
Enter/
Ctrl+Kfail|fatal|fault|sd[a-z][0-9]
Enterいずれかの順序で入力すると、arp
またはdns
(grep -v
など)を含むすべての行を非表示(除外)し、残りの行でfail
、fatal
、fault
、またはSCSIデバイスの名前(sd[a-z][0-9]
)のようなもの。 arp
またはdns
、およびfail
またはその他の危険な単語を含む行は、表示されませんが表示されます。
ここ数か月の間に、私はfzf
にやや夢中になりました。
あなたの場合、コンテキストが必要でない限り(つまり、grepの-A
、-B
、または-C
に相当するものは必要ありません。方法として、lessの&
にも同じ制限があります)、fzfは非常に強力なツールです。
これはばかげた例です:
printf "%s\n" {aa,bb,cc}{dd,ee,ff}{gg,hh,ii} | fzf
これを実行して、aa | bb dd | ee !gg !hh
などの入力を操作すると、何が起こっているのかがすぐにわかります。
|
演算子に関するFzfのドキュメントはまばらですが、私の推測では、直前と直後の用語にのみ適用されるため、ORがANDよりも優先されます。 (これはimplicitです。すべての用語はデフォルトでANDで結合されています。)しかし、ほとんどの場合、これは問題にならず、私の経験では問題はありません。
試してみます。何を探しているのか本当にわからないときや、文脈が問題にならないときに、ブラウジングに関しては、驚くほど便利だと思いました。