変更ログファイルから読み込む

変更ログファイルから読み込む

1つは、/location/of/thefile常に変更されるログファイルです。平均リフレッシュ密度は毎分4回、可能な限り最大リフレッシュレートは毎分30〜40回です。更新するたびに平均2〜5行が追加されますが、極端な場合は何百も追加されることがあります。各行は[YYYY-MM-DD HH:MM:SS]タイムスタンプで始まり、その後にプレーンテキスト(100〜200、最大数百文字)が続きます。

私の使命は簡単なコマンドこのログファイルを継続的に監視し、以下を含む各行を標準出力に送信します。foo または barアルファベット文字列。これらの(サブ)文字列の前後に文字がある場合があります(\nもちろん(サブ)文字列の後にのみ)\0。でも。単語は、可能なすべてのバリアントで大文字で表記できます。

さて、解決策についての私の考えは常にタイミングシステムコールに関連していますが、それを使用してはいけません。私のために作ってください簡単なコマンド。とても感謝しています!

答え1

私は質問を間違って理解したかもしれませんが、これを使用できない理由はありますか?

tail -f /location/of/thefile | grep -i -E "foo|bar"

答え2

次のように名前付きパイプを使用します。

logfile.txtファイルを読み続けますreadfile.sh

# readfile.sh

while read line
do
  echo $line
done < mypipe
$ mkfifo mypipe
$ #this will block (will not exit)
$ ./readfile.sh

他のシェルでは、しかし同じディレクトリ(mypipeファイルがある場所)に:

$ # This will go to background
$ tail -f logfile.txt >> mypipe &

完璧。 logfile.txtに入る内容はreadfile.sh終了せずに印刷されます。

関連情報