sed
recebe sua entrada de stdin, não da linha de comando, para que seu script não funcione teoricamente ou praticamente. sed -i 1,10d $dr
não faz o que você acha que faz ... sed
tratará o valor de "$ dr" como uma lista de nomes de arquivos para processar.
Experimente echo "$dr" | sed -e '1,10d'
ou sed -e '1,10d' <<<"$dr"
.
BTW, você deve usar aspas duplas em torno de "$dr"
aqui, caso contrário, sed
não obterá várias linhas de entrada separadas por \n
, só obterá uma linha de entrada. / p>
Ou melhor ainda, para obter apenas os registros NS, substitua todos os seus comandos sed
por apenas este comando:
tr=$(echo "$dr" | sed -n -e '/IN[[:space:]]\+NS[[:space:]]/p')
Como alternativa, elimine todas as etapas intermediárias e apenas execute isso:
tr=$(dig ns "$d" | sed -n -e '/IN[[:space:]]\+NS[[:space:]]/p')
Ou você pode obter apenas os nomes de host dos servidores de nomes com:
tr=$(dig ns "$d" | awk '/IN[[:space:]]+NS[[:space:]]/ {print $5}')
BTW, a saída de host -t ns domain.example.com
pode ser mais fácil de analisar do que a saída de dig
.