Como posso verificar a sintaxe do domínio em um arquivo?

-2

Eu tentei o script para armazenar os domínios com a sintaxe adequada. Mas eu não consegui a saída correta. Aqui está o que eu fiz e o que recebi e também este comando ficou preso:

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.

Como eu posso escrever um comando de validação que me dará o domínio adequado de acordo com a sintaxe.

Exemplo da saída necessária:

google.com.tk
www.google.co.uk.se
google.co.au
www.google.co.uk.se
m.google.com
www.google.com

Se a entrada for algo assim:

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
    
por Jaffer Wilson 01.02.2017 / 13:58

1 resposta

2

O script a seguir opera com base na remoção de caracteres finais e na verificação da string resultante em relação a nslookup consultas do seu servidor 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 "$@"

Usando o arquivo de entrada fornecido pelo OP, a saída resultante é a seguinte:

$ ./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

Observe que o ponto à direita no final de google.com. e google.co. consultas DNS (que é o que executa nslookup ) terminam em um ponto, a menos que você faça isso, portanto google.com. é uma consulta DNS válida ( de acordo com o RFC 1034 . Consulte este artigo para obter mais informações: link

Se o ponto à direita não for desejável, você pode adicionar a instrução case simples na função find_correct_domain para apará-la, assim:

find_correct_domain(){
    local string="$1"
    while ! nslookup "$string" &> /dev/null
    do
        string="${string%?}"
    done
    case "$string" in
        *.) string="${string%?}";;
    esac
    echo "$string"
}

Claro, lembre-se de que esse script não está otimizado para desempenho: é feito em bash e executa nslookup em todos os itens, então provavelmente o tipo O (n 2 ) de tempo de execução, o que significa que, se você tiver uma lista grande, provavelmente será lento, mas para listas relativamente pequenas, tudo bem.

    
por Sergiy Kolodyazhnyy 02.02.2017 / 06:41