Удалить дубликаты доменов из списка с помощью регулярных выражений - PullRequest
1 голос
/ 17 февраля 2010

Я бы хотел использовать PCRE, чтобы взять список URI и вывести его.

Начало

http://abcd.tld/products/widget1       
http://abcd.tld/products/widget2    
http://abcd.tld/products/review    
http://1234.tld/

Конец

http://abcd.tld/products/widget1
http://1234.tld/

Есть идеи, уважаемые участники StackOverflow?

Ответы [ 5 ]

5 голосов
/ 17 февраля 2010

Вы можете использовать простые инструменты, такие как uniq .

См. Пример Коби в комментариях:

grep -o "^[^/]*//[^/]*/" urls.txt | sort | uniq
2 голосов
/ 17 февраля 2010

Хотя это безумно неэффективно, это можно сделать ...

(?<!^http://\2/.*?$.*)^(http://(.*?)/.*?$)

Пожалуйста, не используйте это

1 голос
/ 17 февраля 2010

Разобрать домен с помощью библиотеки URI, затем вставить его в хеш. Вы напишете любой URL, который уже существует в этом хэше, и в результате получите уникальные ссылки.

Вот пример Ruby:

require 'uri'

unique_links = {}

links.each do |l|
  u = URI.parse(l)
  unique_links[u.host] = l
end

unique_links.values # returns an Array of the unique links
0 голосов
/ 17 февраля 2010

, если в вашей системе (g) awk

awk -F"/" '{
 s=$1
 for(i=2;i<NF;i++){ s=s"/"$i }
 if( !(s in a) ){ a[s]=$NF }
}
END{
    for(i in a) print i"/"a[i]
} ' file

выход

$ ./shell.sh
http://abcd.tld/products/widget1
http://1234.tld/
0 голосов
/ 17 февраля 2010

Если вы можете работать со всем файлом одной строкой, а не построчно, то почему не должно работать что-то подобное?(Я не уверен насчет диапазонов символов.)

s!(\w+://[a-zA-Z0-9.]+/\S+/)([^ /]+)\n(\1[^ /]+\n)+!\1\2!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...