加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – 用sed或grep解析日志

发布时间:2020-12-15 22:17:43 所属栏目:安全 来源:网络整理
导读:我想从这种日志中获取数据. Nov 12 13:46:14 Home cxxd[8892]: 208 11/12 13:46:14| qc=IN (1),qt=A (1),query=”www.yahoo.com.” 实现了这个,它给了我URL.但不适用于“TAIL -F”,以便我可以直接监控网址. tail -100 /var/log/system.log | grep “query=”
我想从这种日志中获取数据.

Nov 12 13:46:14 Home cxxd[8892]: 208 11/12 13:46:14| qc=IN (1),qt=A (1),query=”www.yahoo.com.”

实现了这个,它给了我URL.但不适用于“TAIL -F”,以便我可以直接监控网址.

tail -100 /var/log/system.log | grep “query=” | sed -e “s/.*query=//” | sed -e “s/”//g” | sed -e “s/.$/ /”

请建议或加强

解决方法

我希望你的多个sed脚本可以使用tail -F输出,而不是你想象的那样.

C标准IO库将执行缓冲以提高性能. IO库可以执行(a)无缓冲(b)行缓冲(c)块缓冲.如果输出到达终端,则通常选择行缓冲.但是如果输出转到文件或管道,则通常选择块缓冲. (它比这更复杂 – 如果有问题的文件描述符用于stdout或stderr或其他文件,行为会发生变化.有关详细信息,请参阅setvbuf(3).)

因此,虽然您现在看到的块缓冲可能对性能更好,但它确实意味着您可以在看到任何输出之前等待一段时间,因为每个命令最终会累积一个数据块.至少grep(1)允许–line-buffered命令行选项使用行缓冲 – 而sed(1)允许–unbuffered命令行选项更频繁地刷新输出缓冲区.试试这个:

tail -f /var/log/system.log | grep --line-buffered "query=" | sed -u -e "s/.*query=//" | sed -u -e "s/"//g" | sed -u -e "s/.$/ /"

(我没有找到tail(1)的任何类似选项,但即使它向其他人发送数据块,对grep(1)和sed(1)的更改也会有很大的帮助.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读