web-dev-qa-db-ja.com

ファイルのテール、キャット、grepを同時に実行

したがって、Linuxでログファイルを監視する必要があります。コンテンツをキャットし(以前のすべてのエントリを表示するため)、同時にgrepを使用してログから表示したいものを除外しながら、ログファイルをテールします。 。また、catコマンドがエントリの表示を停止した場所でテールが続くと便利です。

どうすればそれを行うことができますか?

編集:

私の質問をもう少し明確にするために、これが私が欲しいものです:

log.txt:
Line 1 <--- Starting from here is what lines I need
Line 2
Line 3
Line 4
Line 5 <--- Here is where the tail command will start displaying
Line n - 1
Line n <--- Here is where the tail command will continue to go

これらすべてを取得してgrepできる必要があります。

1
Toni Kostelac

これがあなたが探しているものであるかどうかはわかりませんが、あなたはこれを試すかもしれません:

grep "pattern you are looking for" log.txt;tail -n 0 -f log.txt | grep "pattern you are looking for"

2つのコマンドを次々に呼び出しています。最初にログファイルから関心のあるパターンをgrepし、次にファイルの最後でtail -fを開始して、出力をgrepにリダイレクトします。

ただし、1つのコマンドのみを使用して実行することをお勧めします。-nパラメーター(+1は最初の行からの意味)を使用して、テールによって表示される行数を指定できます。

tail -n +1 -f log.txt | grep "pattern you are looking for"
3
JanS

私は次のようなものに行きます

tail -f log_file | grep -E "^|your_pattern"

2つのタブを開いてテストします。

最初に、このコマンドを実行します

while :; do echo "$v"; ((v++)); sleep 1; done > mytest

つまり、ファイルに毎秒数値を追加する連続ストリームを生成しますmytest

次に、他のタブで、

tail -f mytest | grep -E "^|2"

つまり、ファイルを継続的にtailし、次の2つのパターンでgrepを実行します。^すべてに一致し2。こちらです、 ^はすべての行に一致し、すべての行が表示されます。2強調したい行にちょうど一致します。このトリックの詳細については、 フィルターの代わりに強調表示される「Grep」 を参照してください。

2
fedorqui