我有一个生成原始访问日志的网站。我的网络主机没有很好的在线查看用户支持,所以我转向了SSH。现在我正在使用以下 bash 脚本来查看谁在线:
watch tail -50 access.log
但是那里有很多垃圾。有一个机器人每 5 分钟访问一次我的网站,每当有人加载页面时,日志中也会显示一堆资产(图像、JS、CSS)。
有没有办法尾随文件的末尾,并过滤掉包含某些单词的行,例如Alexabot
、.css
、.png
、.jpg
和.js
?
此外,如果命令/脚本从文件末尾向后工作,直到找到 50 行与过滤条件不匹配,而不是只取最后 50 行并抑制该组中的垃圾邮件,这将是理想的。
我研究了 awk 进行过滤,但我被困住了,因为我不知道如何将 awk 与尾巴结合起来。
您可以将grep
与-v
一起使用,反转匹配,
watch tail -50 access.log | grep -v -E '(Alexabot|.css|.png|.jpg|.js)'
-E
标志用于启用Extended Regular Expression (ERE)
语法以允许匹配以|
分隔的多个字符串
您还可以尝试在将流馈送到grep
as 之前禁用stdbuf -oL
输出缓冲
watch tail -50 access.log | stdbuf -oL grep -v -E '(Alexabot|.css|.png|.jpg|.js)'
这是否定多个字符串awk
版本。
watch tail -50 access.log |awk '!/Alexabot|.css|.png|.jpg|.js/'
或者,如果要持续监视。
stdbuf -oL tail -f access.log | stdbuf -iL awk '!/Alexabot|.css|.png|.jpg|.js/'