Как извлечь уникальные домены из access.log?

Вот часть большого файла access.log, который я хочу проанализировать:

4.3.2.1 - - [22/Sep/2016:14:27:18 -0500] "GET / HTTP/1.0" 301 184 "-" "WordPress/4.5.4; http://my.example.com; verifying pingback from 127.0.0.1"- 4.3.2.1 - - [22/Sep/2016:14:27:18 -0500] "GET / HTTP/1.0" 301 184 "-" "WordPress/4.5.4; http://my.example.com; verifying pingback from 127.0.0.1" 3.2.1.4 - - [22/Sep/2016:14:27:18 -0500] "GET / HTTP/1.0" 301 184 "-" "WordPress/4.5; http://somedomain.com; verifying pingback from 1.2.3.4"- 3.2.1.4 - - [22/Sep/2016:14:27:18 -0500] "GET / HTTP/1.0" 301 184 "-" "WordPress/4.5; http://somedomain.com; verifying pingback from 1.2.3.4" 5.4.3.2 - - [22/Sep/2016:14:27:18 -0500] "GET / HTTP/1.0" 301 184 "-" "WordPress/4.4.2; http://demo.otherdomain.com/blog; verifying pingback from 1.2.3.4" 

Мне интересно, как извлечь уникальные домены из файла. Результат должен быть:

 http://my.example.com http://somedomain.com; http://demo.otherdomain.com/blog; 

В подобных ситуациях я большой поклонник grep, используя Perl lookarounds

 grep -oP '(?<=http://).*(?=;)' access.log | sort -u 

Вернет список, используя ваш образец, следующим образом

 $ grep -oP '(?<=http://).*(?=;)' access.log | sort -u demo.otherdomain.com/blog my.example.com somedomain.com 
  awk '{for(i=1;i<=NF;i++)if($i ~ /^http:\/\//)print $i}' access.log |sort -u 

Если вы хотите разобрать https тогда

 awk '{for(i=1;i<=NF;i++)if($i ~ /^http(s)?:\/\//)print $i}' access.log |sort -u 

Также вы можете использовать tr для удаления конечной точки с запятой

 awk '{for(i=1;i<=NF;i++)if($i ~ /^http(s)?:\/\//)print $i}' access.log |tr -d ';' |sort -u 
 awk '{ print $13 }' access.log | sort -u 

Я считаю, что это основная попытка. awk выберет 13-е поле каждой строки, используя пробел в качестве разделителя, и оно будет отправлено в сортировку, которая сортирует URL-адреса и удаляет кратные ( -u для uniq).

Если только некоторые строки будут иметь информацию, или они не все будут в этом формате, вам нужно сначала перенести файл, чтобы выбрать, для каких строк это применимо.