1

把自己逼疯了。我试图从 access.log 中获取域名 (http://www.example.com)。日志的样子:

tail access.log 

Fri, 13 Jul 2012 20:32:03 -0700,INFO,6fgmd8fk,params,http://www.example.com/images/CIV-260.jpg|

我已经尝试过这种单线的许多变体(使用 sed 和 awk):

tail -4 access.log |grep http |awk {'print $6'} |cut -c28- |awk '$1>".com"' |sort |uniq

http://www.example.com/2713-7807.jpg|
http://www.example.com/2713-7808.jpg|
http://barfoo.com/img/14616_20120711182527.jpg|
http://foobar.com/css/14616_20120713142151.css|

我被困住了。

4

3 回答 3

3

也许只是

awk -F/ '{print $3}'

如果您没有比示例显示的更多的“/”。请注意,正如您的问题所要求的那样,这只是域名。

于 2012-07-14T03:57:04.863 回答
2

使用grep

grep -Po '(?<=http://)[^/]+' access.log | sort -u

如果你想拥有http://作为域名的一部分,

grep -Po 'http://[^/]+' access.log | sort -u
于 2012-07-14T03:58:18.077 回答
1

使用sed

sed -n 's|.*\(http://[^/]*\)/.*|\1|p' access.log | sort -u
于 2012-07-14T05:58:52.587 回答