10.1.2.194 (197.84.211.148) - - [08/Oct/2015:09:01:44 +0000] "GET /merlin-web-za/web/images/refinements/loader.gif HTTP/1.1" 200 4178 0 1868 "http://www.autotrader.co.za/makemodel/make/chevrolet/model/aveo/caryearrangeszar/2012/search?sort=PriceAsc&locationName=Cape%20Town&latitude=-33.92584&longitude=18.42322&county=Western%20Cape" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" "ajp://10.1.4.66:8009"我需要在以下几个方面修改:
08/Oct/2015:09:01:44 GET /merlin-web-za/web/images/refinements/loader我如何使用awk或egrep进行操作?-我尝试了下面的命令,但是第一个命令的结果显示了包含这两种模式的完整字符串。
awk ' /08/Oct/2015:09:[0-9]{2}:[0-9]{1,2}/ && /GET (/[a-z0-9-]{1,}){1,3}/'和
cat file | egrep -o "08/Oct/2015:09:[0-9]{2}:[0-9]{1,}.* GET (/[a-z0-9-]{1,}){1,}"这填补了上述模式之间的空白,因此我可以看到:
08/Oct/2015:09:01:44 +0000] "GET /merlin-web-za/web/images/refinements/loader这不是我想要的
发布于 2019-12-06 17:48:37
你可以用
awk '{a=$5" "$7" "$8; gsub(/[]["]|\.[^.]*$/, "", a); print a}'见在线演示
详细信息
默认的字段分隔符--空白--用于将行拆分为字段。
a=$5" "$7" "$8; -通过使用空格将字段5、7和8连接起来创建一个变量gsub(/[]["]|\.[^.]*$/, "", a) -删除字符串末尾的[、]和"以及. +除.以外的任何0+字符print a -打印结果。但是,您发送给我的文件在第一个括号中包含comma+space分隔的IP地址。你可以用
sed -E -n 's/^[^][]*\[([^][[:space:]]+)[^][]*\][ \t]+"([[:alpha:]]+[ \t]+[^[:space:]]+).*/\1 \2/p' access_log > newfile要获得您想要的结果,即time + Get/post +URL。
详细信息
^ -匹配字符串的开始[^][]* -除[和]以外的任何0或多个字符\[ -a [ char([^][[:space:]]+) -第1组:]、[和空格以外的1+字符[^][]* -除[和]以外的任何0或多个字符\] -a ] char[ \t]+ - 1+水平空格图" -a " char([[:alpha:]]+[ \t]+[^[:space:]]+) -第2组: 1+字母,1+水平空格,然后是1+字符,而不是空格.* -剩下的字符串.结果是第1组和第2组值的串联。
https://stackoverflow.com/questions/59217849
复制相似问题