como substituir substring desconhecido da linha com sed

0

Eu quero substituir uma substring em uma linha, mas não sei o que é essa substring. Eu sei como a linha começa embora. Por exemplo, DNS1 = [... a ser substituído ...].

Eu tentei:

sed -i 's/DNS1=*/DNS1="8.8.8.8"/' /etc/sysconfig/network-scripts/ifcfg-eth0

e o resultado foi:

Antes: DNS1="10.10.2.2"

Depois: DNS1="8.8.8.8" "10.10.2.2"

O que estou fazendo de errado ...

    
por cHam 01.08.2013 / 21:41

1 resposta

2

Tente:

sed -i 's/DNS1=.*/DNS1="8.8.8.8"/' /etc/sysconfig/network-scripts/ifcfg-eth0

O operador * significa "corresponde ao caractere anterior 0 ou mais vezes". No seu exemplo, o caractere precedente é = , portanto, ele corresponderá a DNS1= e nada mais, pois não há mais caracteres = sequenciais e substitua essa parte por DNS1="8.8.8.8" , que gera a string DNS1="8.8.8.8""10.10.2.2" , como você disse.

O operador . significa "qualquer caractere" em sed context, que é provavelmente o que você deseja aqui. Essa variação corresponderá a DNS1= e, em seguida, "qualquer caractere 0 ou mais vezes" até o final da linha e, em seguida, substituirá por DNS1="8.8.8.8" .

    
por 01.08.2013 / 21:44