Я попробовал сценарий для хранения доменов правильным синтаксисом. Но я не сделал получил надлежащий вывод. Вот то, что я сделал и что я получил, и также эта команда застряла:
while read -r url; do noprefix=${url#*//}; nosuffix=${noprefix%%/*}; echo "$nosuffix"; done < FinaleOutput.txt > First.txt
msn.com.jp
msn.com.jp
msn.comjswartout
msn.comjubas
msn.com.junk
msn.comk
msn.com...kugoo
msn.comlamer6
msn.comlcrane
msn.comleonardpj49
msn.comlinkbobber
msn.comm
msn.comm.
Как я могу записать команду проверки, которая даст мне надлежащий домен согласно синтаксису.
Пример вывода потребовал:
google.com.tk
www.google.co.uk.se
google.co.au
www.google.co.uk.se
m.google.com
www.google.com
Если вход - что-то вроде этого:
google.com.tkmn/1/2/3/
www.google.co.uk.seas
google.co.au___travel
www.google.co.uk.se/1/2/
m.google.com--tour
http://www.google.com/au
Следующий сценарий работает на основе удаления конечных символов и проверки получившей строки против nslookup
запросы Вашего сервера DNS:
#!/bin/bash
find_correct_domain(){
local string="$1"
while ! nslookup "$string" &> /dev/null
do
string="${string%?}"
done
echo "$string"
}
main(){
local new_line=""
while IFS= read -r line
do
case "$line" in
http*) new_line=${new_line##*/} ;;
*) new_line="$line";;
esac
find_correct_domain "$new_line"
done < "$1"
}
main "$@"
Используя входной файл, обеспеченный OP, получающийся вывод следующие:
$ ./format_domains.sh input.txt
google.com.
www.google.co.uk.se
google.co.
www.google.co.uk.se
m.google.com
m.google.com
Заметьте запаздывающую точку в конце google.com.
и google.co.
Запросы DNS (который является что nslookup
работает), все завершаются в точке, если Вы не делаете так себя, следовательно google.com.
действительный запрос DNS (согласно RFC 1034). Обратитесь к этой статье для большего количества информации: http://www.dns-sd.org/trailingdotsindomainnames.html
Если запаздывающая точка не желательна, можно добавить простой case
оператор в find_correct_domain
функционируйте для обрезки этого, как так:
find_correct_domain(){
local string="$1"
while ! nslookup "$string" &> /dev/null
do
string="${string%?}"
done
case "$string" in
*.) string="${string%?}";;
esac
echo "$string"
}
Конечно, имейте в виду, что этот сценарий не оптимизирован для производительности: в этом выполняют bash
и работает nslookup
на всех объектах, таким образом, это, вероятно, O (n2) тип времени выполнения, что означает, что, если у Вас есть большой список, это, вероятно, отстанет, но для относительно маленьких списков он прекрасен.