リアルタイムで特定の行の特定のテキストを切り取る

リアルタイムで特定の行の特定のテキストを切り取る

そのため、リアルタイムで実行されるログがあり、「test.txt」というテキストファイルにリアルタイムで保存されました。次に、このテキストファイルの変更を継続的にポーリングし、特定のデータビットを繰り返すプロセスを構築したいと思います。たとえば、ログは次のようになります。

Feb  9 11:43:24 dnsmasq[887]: query[A] captive.g.aaplimg.com from 192.168.178.21
Feb  9 11:43:24 dnsmasq[887]: forwarded captive.g.aaplimg.com to 8.8.4.4
Feb  9 11:43:24 dnsmasq[887]: reply captive.g.aaplimg.com is 17.253.55.202
Feb  9 11:43:24 dnsmasq[887]: reply captive.g.aaplimg.com is 17.253.57.211
Feb  9 11:43:54 dnsmasq[887]: query[A] captive.g.aaplimg.com from 192.168.178.21

出力テキストが次のようになるようにquery [A]がある行からのみ情報を削除したいと思います。

11:43 captive.g.aaplimg.com

ただし、問題は、このログ行に別のURLが追加されていることです。たとえば、次のようになります。

Feb  9 11:49:56 dnsmasq[887]: query[A] www.googleapis.com from 192.168.178.21

その後、出力は次のようになります。

11:49 www.googleapis.com

ただし、テキストファイル/ログが更新されるため、リアルタイムで発生する必要があります。

PiでDebian Busterを実行します。

ベストアンサー1

tail -F test.txt | 
   perl -nE 'say "$+{time} $+{url}" if /(?<time>\d{2}:\d{2}):\d{2} dnsmasq\S+: query\S+ (?<url>\S+) from /'

tail -F(「下」)が追加された行を探し続けますtest.txt

一致する行をフィルタリングperlして抽出します(そしてセグメントを使用して正規表現の一部をキャプチャします(?<named_capture>...))。

おすすめ記事