48

Linuxシステムでいくつかの巨大なログファイルを読む必要があります。ログにはたくさんの雑然としたものがあります。現在、私は次のようなことをしています。

cat logfile.txt | grep -v "IgnoreThis\|IgnoreThat" | less

ただし、面倒です。別のフィルターを追加するたびにless、コマンドラインを終了して編集する必要があります。一部のフィルターは比較的複雑で、複数行になる場合があります。

ログを読んでいるときにフィルターを適用する方法と、これらのフィルターをどこかに保存する方法が必要です。

私のためにこれを行うことができるツールはありますか?私は新しいソフトウェアをインストールできないので、うまくいけば、それはすでにインストールされているものです-たとえば、less、vi、PythonまたはPerllibの何かなど。

ログを生成するコードを変更して生成量を減らすことはできません。

4

5 に答える 5

113

&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.
于 2012-07-04T12:36:41.833 に答える
4

multitailツールを試してみてください。一度に複数のログを表示できるだけでなく、対話的に正規表現フィルターを適用できることは間違いありません。

于 2010-02-26T01:31:30.357 に答える
4

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-- フィルタリングせずにログを表示するには

今のところこれで十分ですが、フィルターをその場で編集できるようにしたいと考えています。

于 2010-02-26T02:14:27.743 に答える
0

lessのman ページを参照してください。たとえば、単語の検索に使用できるオプションがいくつかあります。ライン編集モードも搭載。

于 2010-02-26T01:04:48.273 に答える