Como inserir as linhas de um arquivo em outro arquivo depois de uma palavra-chave?

0

Eu tenho um arquivo que contém o seguinte:

10.48.29.68 doggy
10.65.8.184 kitty
10.48.15.104 froggy

Eu preciso inserir o conteúdo deste arquivo no meu arquivo hosts após a linha bc group no arquivo hosts.

O hostfile do servidor já possui centenas de entradas. Bc é um grupo aqui no nosso arquivo hosts. Eu quero código que lê os endereços IP e nomes de host no meu arquivo acima e coloque essas entradas no arquivo hosts abaixo do título bc group .

O novo arquivo acima deve ser escrito no arquivo hosts após a palavra-chave bc group .

Por exemplo, se meu arquivo hosts contiver estas linhas:

10.59.12.232 bc4
10.48.29.68 xy9
bc group
10.63.71.136 bc2
10.63.71.214 bc3

Eu preciso converter o arquivo hosts para isso:

10.59.12.232 bc4
10.48.29.68 xy9
bc group
10.48.29.68 doggy
10.65.8.184 kitty
10.48.15.104 froggy
10.63.71.136 bc2
10.63.71.214 bc3

Eu preciso acrescentar todas as linhas do meu primeiro arquivo após a linha bc group no meu arquivo hosts, e então continuar com as linhas restantes no arquivo hosts.

    
por Varun Dogra 15.10.2017 / 00:41

2 respostas

1

Tente isto:

sed '/^bc group$/ r file1' hostfile

Este comando sed copia as linhas de hostfile para a saída e lê (insere) as linhas de file1 após qualquer (e todas) bc group linha (s) em hostfile .

Para salvar a saída em outro arquivo, anexe > newhostfile ao comando:

sed '/^bc group$/ r file1' hostfile > newhostfile

No entanto, eu recomendo isso, o que faz um backup com o sufixo .bak e edita o arquivo:

sed -i.bak '/^bc group$/ r file1' hostfile

Se a linha bc group aparecer mais de uma vez no hostfile , as linhas de file1 serão inseridas mais de uma vez.

    
por 15.10.2017 / 04:00
0

Parece que você precisa de algo assim:

INPUT_FILE='/path/to/file'
GROUP_NAME='# bc group'
HOSTS_FILE='/etc/hosts'

echo "$GROUP_NAME" >> "$HOSTS_FILE"
while read line; do

    echo "$line" >> "$HOSTS_FILE"

done < "$INPUT_FILE"

Este script primeiro acrescenta seu $HOSTS_FILE com o $GROUP_NAME (Comentado). Em seguida, ele faz um loop em cada linha do seu arquivo de entrada e os anexa ao arquivo hosts no nome do seu grupo.

    
por 15.10.2017 / 03:38