2009-07-08 22 views
2

成長するログファイルに "tail"を行うためのシェルスクリプトを書いています。このスクリプトは、検索するパラメータを受け入れ、その出力を段階的にgrepsします。例えば動的にgrep文字列を構築する

次のようにスクリプトが呼び出された場合、:

logs.sh string1 string2 

それはに変換する必要があります

tail -f logs.txt | grep string1 | grep string2 

私はこのようなgrepの文字列のリストを構築しています:

full_grep_string="" 
for grep_string in $* 
do 
    full_grep_string="$full_grep_string | grep $grep_string" 
done 

文字列は正しく構築されていますが、最終的にtailコマンドにタグ付けしようとすると...

tail -f $LOG_FILE_PATH $full_grep_string 

... grepは適用されず、フィルタされていないログが取得されます。

ここに何か不足していますか?またはこれを行う簡単な方法はありますか?

+0

ほんの少しの明確化:アイデアは、あなたのスクリプトが出力の両方が含まれているログファイルの行をべきであるということですstring1とstring2のいずれかを含む行を探したいと思っていましたか? –

+0

また、どのシェルを使用していますか? bash? –

+0

私はdebian lennyで私は2つのgrepを組み合わせてもtail -fではなく、ちょうどテールで動作するという問題に直面しています – tuergeist

答えて

2
eval tail -f $LOG_FILE_PATH $full_grep_string 
+0

それは働いた!ありがとう! :) –

1

grepが見つけた行をバッファします。したがってコードを変更すると、

full_grep_string="$full_grep_string | grep --line-buffered $grep_string" 

になります。私はdebian lennyでそれをテストしました(bashで)。

そして

eval tail -f ... 

AN0の先端を使用します(このすべては、単語全体のために働く)

+0

チップをありがとう..しかし、grepの私のバージョンが完全な単語の引数を取るには古すぎるように見えます。私はSunOS 5.8の箱でテストしています。非常に古いソフトウェア。 :) –

関連する問題