实时剪切特定行中的特定文本

实时剪切特定行中的特定文本

因此,我有一个实时运行的日志,并实时保存到名为“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>...))。

相关内容