tail出力をファイルにリダイレクトし、一致するものが見つかったら停止します。

tail出力をファイルにリダイレクトし、一致するものが見つかったら停止します。

このログファイルを使用すると、データが継続的に入力されます。私が望むのは、このログファイルをtail -fとして処理し、ff条件を持つファイルにリダイレクトすることです。

ログファイルの内容の例

aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbb
ccccccccccccccc
ddddddddddddddd
eeeeeeeeeeeeeee
fffffffffffffff
ggggggggggggggg
hhhhhhhhhhhhhhh
iiiiiiiiiiiiiii

テーリングでは、最初のパターンが見つかるとリダイレクトが開始され、2番目のパターンが見つかった場合はリダイレクトとテーリングが停止されます。例えば

「dddddddddddd」パターンが見つかるとリダイレクトが開始され、「hhhhhhhhhhhhhhhhh」パターンが見つかったらリダイレクトを停止したいと思います。リダイレクトによって生成されるファイルの内容は、次のようにする必要があります。

ddddddddddddddd
eeeeeeeeeeeeeee
fffffffffffffff
ggggggggggggggg
hhhhhhhhhhhhhhh

コーディングをしながらこのような考えをしました。しかし、2番目のパターンが見つかった場合は、リダイレクトを停止する方法がわかりません。

tail -f logfile > log.tmp
while grep "ddddddddddddddd" log.tmp
do
cat log.tmp > logfile
done

ベストアンサー1

これが正しいretailする。retailtailは正規表現を含むツールで、ここであなたのユースケースのために書いたツールです。あなたの場合は、以下を使用してください。

retail -f -r ddddddddddddddd -u hhhhhhhhhhhhhhh logfile > log.tmp

-f標準tail -fオプションです。-r含める行の範囲を開始する正規表現と続行するには、正規-u表現を許可します。それは始まる最後パターンが表示され、-r印刷後に終了します。最初-uパターンはその後に現れた。

パターンの最初のインスタンスから始めるには、-bと一緒に使用できます-r。両方の正規表現はすべてむしろ、暗黙的なアンカリングはありませんが、通常どおり、一致をアンカーするために^使用できます。$


retail以下から入手してビルドできます。

git clone https://github.com/mwh/retail.git
cd retail
./configure
make
make install

~/.local/bin既定ではインストールされていますが、変更したり、目的の場所に実行可能ファイルをコピーしたりできます。


retail完全POSIX互換ただし、実際にシステムに使用することはお勧めできませんtail

おすすめ記事