Como posso obter meu script bash para remover as primeiras n e últimas n linhas de uma variável?

1

Estou fazendo um script para pré-formatar "dig ns google.com" e cortar todo o resultado, exceto a seção de respostas.

Até agora eu tenho:

#!/bin/bash

echo -n "Please enter the domain: "
read d
echo "You entered: $d"
dr="$(dig ns $d)"
sr="$(sed -i 1,10d $dr)"
tr="$(head -n -6 $sr)"
echo "$tr"

Teoricamente, isso deve funcionar. Os comandos sed e head trabalham individualmente fora do script para cortar os 10 primeiros e os 6 últimos, respectivamente, mas quando eu os coloco dentro do meu script, o sed volta com um erro e parece que está tentando ler a variável como parte do script. comando em vez da entrada. O erro é:

sed: invalid option -- '>'

Até agora não consegui encontrar uma maneira de ler a variável como entrada. Eu tentei cercá-lo em "" e "" mas isso não funciona. Eu sou novo em toda esta coisa de script bash obviamente, qualquer ajuda seria ótima!

    
por Egrodo 11.04.2016 / 03:28

1 resposta

4

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 .

    
por 11.04.2016 / 03:53