从nginx日志文件中提取IP和引用的简单方法



如何使用awk或其他可能的命令找到包含facebook/instagram/twitter/等的ip和referer:

1.2.3.4 https://l.instagram.com/
4.3.2.1 https://facebook.com/

Nginx日志文件的标准格式:

1.2.3.4 - - [02/Oct/2021:06:07:08 +0300 - -] 200 "GET /index.php HTTP/2.0" 6620 "https://l.instagram.com/" "Mozilla/5.0 (Linux; Android 9; SM-N950F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Mobile Safari/537.36" "-"

我用

awk '{print $1}' access.log

awk -F" '{print $2}' access.log

但是我不知道如何把ip和referer放在一起。

$ awk -F'[ "]' '{print $1, $16}' file
1.2.3.4 https://l.instagram.com/

使用gnu-awk,您可以使用FPAT和模式指定字段。

示例中的字段来自[...]"..."或1个或多个非空白字符。

你可以用|来写一个模式来匹配这3个变量中的任何一个。

\[[^][]*]|"([^"]*)"|\S+

Regex演示

如果url应该匹配instagram或facebook,您可以使用另一个模式并从匹配中删除双引号。列值现在是1和8。

awk -v FPAT='\[[^][]*]|"([^"]*)"|\S+' '{
if ($8 ~ /(instagram|facebook)./) {
gsub(/"/, "", $8)
print $1, $8
}
}' access.log

输出
1.2.3.4 https://l.instagram.com/

awk

$ awk '{gsub(/,/,"");print $1, $13}' input_file

sed

$ sed -E 's/^(.[^ ]*).*"(https.[^"]*).*/1 2/' input_file

1.2.3.4 https://l.instagram.com/

最新更新