gpt4 book ai didi

shell - 使用 sed 或 grep 进行日志解析

转载 作者:行者123 更新时间:2023-12-04 22:35:25 25 4
gpt4 key购买 nike

我想从这种日志中获取数据。

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) 的更改也会有很大帮助。)

关于shell - 使用 sed 或 grep 进行日志解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8103385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com