我有下面的命令,它打印出命中、主机 IP(本地服务器/负载平衡器)和外部 IP(导致命中的 IP)我还想打印出用户代理信息以及给定的信息。请问如何实现这一点?
cat access.log | sed -e 's/^\([[:digit:]\.]*\).*"\(.*\)"$/\1 \2/' | sort -n | uniq -c | sort -nr | head -20
我得到的如下...
点击次数、主机 IP、外部 IP
如果可能的话我想要什么...
点击次数、IP(主机示例)、外部 IP(导致点击)、用户代理
10000 192.168.1.1 148.285.xx.xx Mozilla/5.0(Windows NT 6.2;WOW64)AppleWebKit/537.4(KHTML,如 Gecko)Chrome/98 Safari/537.4
下面附上日志的摘录
192.168.xxx.x - - [10/Jun/2019:12:40:15 +0100] "GET /company-publications/152005 HTTP/1.1" 200 55848 "google.com" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6" "xx.xx.xx.xx"
最佳答案
如果 GNU AWK (gawk
) 可用,请尝试以下操作:
awk -v FPAT='(\"[^"]+\")|(\\[[^]]+])|([^ ]+)' '
{ gsub("\"", "", $9); gsub("\"", "", $10); print $1 " " $10 " " $9 }
' access.log | sort -n | uniq -c | sort -nr | head -20
FPAT
的值表示access.log
中每个字段的正则表达式。即:“双引号包围的字符串”、“正方形包围的字符串” 括号”或“由空格分隔的字符串”。- 然后您可以将
access.log
的每一行拆分为字段:$1
表示主机 IP
,$10
用于外部 IP
,$9
用于用户代理
。
关于linux - 从 Apache/Nginx Access.log 检索用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56525488/