我下面有一个命令,可以打印出匹配,主机IP(本地服务器/负载平衡器)和外部IP(导致匹配的一个),我也想在给出的信息旁边打印出用户代理信息。请问如何实现?
$var = file('q1.txt');
$abc = explode(' ', $var);
echo '<ul style=" list-style-type: circle;">';
foreach($abc as $value){
echo " <li>$value</li>";
}
echo '</ul>';
我得到的是下面的...
命中,主机IP,外部IP
如果可能的话,我想要...
命中,IP(主机示例),外部IP(导致匹配),用户代理
cat access.log | sed -e 's/^\([[:digit:]\.]*\).*"\(.*\)"$/\1 \2/' | sort -n | uniq -c | sort -nr | head -20
下面是日志摘录
10000 192.168.1.1 148.285.xx.xx Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4
答案 0 :(得分:0)
如果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
代表host IP
,
$10
代表external IP
,$9
代表user agent
。