inserir no meio de uma linha em um arquivo de texto usando sed

0

Estive pesquisando como adicionar texto a uma linha no arquivo.

para que a linha que eu tenho no arquivo de texto se pareça com isso

hosts allow = 192.168.122. 172.24.0 

Eu quero adicionar IP para que a linha pareça

hosts allow = 192.168.122.  192.12.0.  172.24.0

Por tentativa e erro, eu só tenho:

sed -i '/allow/ s/.*/&,192.12.0./' testfile

que dá:

hosts allow = 192.168.122. 172.24.0. 192.12.0.
    
por Rishav 18.09.2017 / 18:57

2 respostas

1

Usando awk para inserir a sequência como o segundo ao último campo na linha:

$ awk '/allow/ { $(NF+1) = $NF; $(NF-1) = "192.12.0." } { print }' file
hosts allow = 192.168.122. 192.12.0. 172.24.0

O primeiro bloco será executado para qualquer linha em file contendo a string allow . Primeiro, moverá o último campo, $NF , um passo adiante, para $(NF+1) . Isso aumenta NF em um. Em seguida, ele atribui a string ao segundo ao último campo, $(NF-1) .

Todas as linhas são impressas.

Redirecione a saída desse para um novo arquivo e mova esse arquivo para o lugar:

awk ...as above... file >file.new && mv file.new file
    
por 18.09.2017 / 20:52
0
sed 's/= [^ ]*/& 192.12.0/'

Captura o sinal = , o espaço e todos os caracteres antes do próximo espaço. Isto é, esta parte = 192.168.122. . Em seguida, substitui todos os caracteres correspondentes - & (em outras palavras, não altera essa parte, apenas a retorna), além de adicionar o ip 192.12.0 necessário.

Entrada

hosts allow = 192.168.122. 172.24.0

Resultado

hosts allow = 192.168.122. 192.12.0 172.24.0
    
por 19.09.2017 / 02:45

Tags