使用正则表达式表达组的GREP

雅克

我正在尝试解析一些Apache access.log并获取用户代理。一条线看起来像

54.183.192.175 - - [27/Nov/2015:16:52:37 +0000] "GET / HTTP/1.0" 200 329 "-" "Mozilla/5.0 (Windows NT 6.3; rv:36.0 Gecko/20100101 Firefox/36.0"

我去了reg101站点,最后得到的表达式.*".*".*".*"(.*)"与站点中的用户代理完全匹配。然后我尝试在grep命令中使用该正则表达式,它根本不返回任何内容。

我尝试用单引号和双引号代替没有成功。有人可以指出我该怎么办?

grep -o '.*".*".*".*"(.*)"' access.log   -- no results at all

grep -o .*\".*\".*\".*\"(.*)\" access.log   -- error `bash: syntax

意外令牌附近的错误 ('

阿努巴瓦

要提取最后一对中的字符串""awk将是最简单的解决方案:

awk -F '"' '{print $(NF-1)}' httpd.log
Mozilla/5.0 (Windows NT 6.3; rv:36.0 Gecko/20100101 Firefox/36.0

这个怎么运作:

  • 通过使用-F '"'我们"用作字段分隔符
  • $(NF-1)得到last - 1领域

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章