このログファイルを使用すると、データが継続的に入力されます。私が望むのは、このログファイルを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
する。retail
tailは正規表現を含むツールで、ここであなたのユースケースのために書いたツールです。あなたの場合は、以下を使用してください。
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
。