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 に答える