Linuxシステムでいくつかの巨大なログファイルを読む必要があります。ログには多くの混乱があります。現在、私はこのようなことをしています:
cat logfile.txt | grep -v "IgnoreThis\|IgnoreThat" | less
しかし、面倒です。別のフィルターを追加するたびに、less
を終了してコマンドラインを編集する必要があります。一部のフィルターは比較的複雑で、複数行の場合があります。
ログを読んでいるときにフィルターを適用する方法、およびこれらのフィルターをどこかに保存する方法を教えてください。
これを行うためのツールはありますか?私は新しいソフトウェアをインストールできないので、うまくいけば、それはすでにインストールされているものです-たとえば、less、vi、PythonまたはPerl libなど).
ログを生成するコードを変更して、生成するコードを少なくすることはできません。
multitail ツールを試してください-複数のログを一度に表示できるだけでなく、対話的に正規表現フィルターを適用できると確信しています。
使用する &pattern
コマンドはless内にあります。
マンページから
&パターン
Display only lines which match the pattern; lines which do not match the pattern are not displayed. If pattern is empty (if you type & immediately followed by ENTER), any filtering is turned off, and all lines are displayed. While filtering is in effect, an ampersand is displayed at the beginning of the Prompt, as a reminder that some lines in the file may be hidden. Certain characters are special as in the / command: ^N or ! Display only lines which do NOT match the pattern. ^R Don't interpret regular expression metacharacters; that is, do a simple textual comparison.
ghostdog74の回答 とless
のマンページに基づいて、私はこれを思いつきました:
~/.bashrc
:export LESSOPEN='|~/less-filter.sh %s'
export LESS=-R # to allow ANSI colors
~/less-filter.sh
:#!/bin/sh
case "$1" in
*logfile*.log*) ~/less-filter.sed < $1
;;
esac
~/less-filter.sed
:/deleteLinesLikeThis/d # to filter out lines
s/this/that/ # to change text on lines (useful to colorize using ANSI escapes)
次に:
less logfileFooBar.log.1
-フィルターを自動的に適用します。cat logfileFooBar.log.1 | less
-フィルタリングせずにログを表示する今のところこれで十分ですが、その場でフィルターを編集できるようにしたいと思います。
以下の man page を参照してください。たとえば、単語の検索に使用できるいくつかのオプションがあります。行編集モードもあります。
Casstor Software SolutionsによるLogFilter(www.casstor.com)と呼ばれるアプリケーションがあり、Windows/Mac/Linuxテキストファイルを編集し、ファイルフィルタリングを簡単に実行できます。複数のフィルターと正規表現をサポートしています。あなたが探しているものかもしれません。