+-

我想从我的服务器日志中获取“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 -
我只想显示:你好和ss
有什么办法可以做到吗?
最佳答案
假设你有gnu grep,你可以使用perl风格的正则表达式做一个积极的lookbehind:
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
这里的底线是,你当然不需要管道来实现这一目标. grep或sed就足够了.
点击查看更多相关文章
转载注明原文:linux – 使用grep在每行匹配后获取下一个WORD - 乐贴网