如何使用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/