Grep特定域和来自access.log的所有子域

时间:2013-11-07 19:20:40

标签: apache bash logging grep

我正在尝试使用Apache2 access.log中的域grep特定行。在我的access.log中,我拥有所有虚拟主机和不同的域。

猫/无功/日志/ access.log的:

www.something-else-domain.si:80 193.77.xxx. xxx - - [06/Nov/2013:12:21:45 +0100] "GET /path/to/dir/image.jpg HTTP/1.1" 304 - "www.something-else-domain.si/index.php" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0"

www.domain.si:80 193.77.xxx. xxx - - [06/Nov/2013:12:21:45 +0100] "GET /path/to/dir/image. jpg HTTP/1.1" 304 - "www.domain.si/index.php" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0"

domain.si:80 193.77.xxx. xxx - - [06/Nov/2013:12:21:45 +0100] "GET /path/to/dir/image. jpg HTTP/1.1" 304 - "www.domain.si/index.php" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0"

我只想要grep只有domain.si和www.domain.si以及whatever.domain.si而不是some-else-domain.si。我怎么能这样做?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

egrep '^([^ ]*\.)?domain\.si' /var/log/access.log

将此分开:

  • ^是该行的开头。
  • (xxx)?是“匹配xxx或没有”;在这种情况下,匹配:
    • 什么都没有,这是裸域名(domain.si
    • 的情况
    • [^ ]*\.,任何不是空格的字符串,后跟一个点。这与可选的www.whatever.部分匹配。
  • domain\.si只是匹配domain.si部分。

使用^锚定以及“无空格”位确保您只匹配行开头的内容(而非GET /domain.si之类的请求。)

答案 1 :(得分:0)

gnu awk解决方案

awk  '/www.domain$|domanin$/ {print $NF RS}' RS=".si"
www.domain.si
"www.domain.si
"www.domain.si

您的示例中存在问题。 url

中不允许使用空格