删除模式后的所有内容(.com)

时间:2012-07-14 03:47:46

标签: bash sed awk

让自己疯狂。我试图从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|

我尝试了这种单线程的许多变体(with sed and 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|

我被困住了。

3 个答案:

答案 0 :(得分:3)

也许只是

awk -F/ '{print $3}'

如果你没有更多' /'比你的例子显示。 请注意,这只是域名,正如您的问题所示。

答案 1 :(得分:2)

使用grep

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

如果您想将http://作为域名的一部分,

grep -Po 'http://[^/]+' access.log | sort -u

答案 2 :(得分:1)

使用sed

sed -n 's|.*\(http://[^/]*\)/.*|\1|p' access.log | sort -u