gpt4 book ai didi

linux - 在每行匹配后使用 grep 获取下一个 WORD

转载 作者:IT王子 更新时间:2023-10-28 23:57:16 26 4
gpt4 key购买 nike

我想从我的服务器日志中获取“GET”查询。

例如,这是服务器日志

1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:32:27] code 404, message File not fo$
1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:32:27] "GET /hello HTTP/1.1" 404 -
1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:41:57] code 404, message File not fo$
1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:41:57] "GET /ss HTTP/1.1" 404 -

当我尝试使用简单的 grep 或 awk 时,

Adi:~ adi$ awk '/GET/, /HTTP/' serverlogs.txt

它给出了

1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:32:27] "GET /hello HTTP/1.1" 404 -
1.0.0.127.in-addr.arpa - - [10/Jun/2012 15:41:57] "GET /ss HTTP/1.1" 404 -

我只想显示:helloss

有什么办法可以做到这一点吗?

最佳答案

假设您有 gnu grep,您可以使用 perl 风格的正则表达式进行正向回顾:

grep -oP '(?<=GET\s/)\w+' file

如果您没有 gnu grep,那么我建议您只使用 sed:

sed -n '/^.*GET[[:space:]]\{1,\}\/\([-_[:alnum:]]\{1,\}\).*$/s//\1/p' file

如果你碰巧有 gnu sed,那可以大大简化:

sed -n '/^.*GET\s\+\/\(\w\+\).*$/s//\1/p' file

这里的底线是,您当然不需要管道来完成此操作。 grepsed 就足够了。

关于linux - 在每行匹配后使用 grep 获取下一个 WORD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10971765/

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