Использование egrep для копирования URL - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь создать скрипт в bash, который находит URL-адреса из текстового файла (example.com, example.eu, et c) и копирует их в другой текстовый файл, используя egrep. Мой текущий вывод дает мне URL-адреса, которые я хочу, но, к сожалению, гораздо больше, что я не хочу, например, 123.123 или example.3xx.

Мой сценарий в настоящее время выглядит следующим образом:

egrep -o '\w*\.[^\d\s]\w{2,3}\b' lab4trace.txt > lab4url.txt

Я пытался использовать некоторые сайты проверки регулярных выражений, но регулярное выражение на сайте дает мне больше правильного ответа, чем мои собственные результаты.

Любая помощь оценивается

Ответы [ 2 ]

0 голосов
/ 07 марта 2020

На основе { ссылка }https://tools.ietf.org/html/rfc2181#section -11 ) доменное имя представляет собой серию меток, которые могут содержать любой символ, кроме ., разделенных . , Поскольку вам нужны только те действительные TLD, вы можете использовать https://data.iana.org/TLD/tlds-alpha-by-domain.txt для создания списка шаблонов:

grep -i -E -f <(curl -s https://data.iana.org/TLD/tlds-alpha-by-domain.txt | sed 's/^/([^.]{1,63}\\\.){1,4}/') <<'EOF'
aaa.ali.bab.yandex
fsfdsa.d.s
alpha flkafj
foo.bar.zone
alpha.beta.gama.delta.zappos
example.com
EOF

Результат:

aaa.ali.bab.yandex
foo.bar.zone
alpha.beta.gama.delta.zappos
example.com

Примечание: это убийца памяти в приведенном выше примере заняла 2 ГБ, список TLD огромен, вы можете поискать список часто используемых TLD и использовать его вместо этого.

0 голосов
/ 06 марта 2020

Если вы знаете суффикс домена, у вас может быть регулярное выражение, которое ищет *. (Com | eu | org)

...