Como usar o sed para alterar o último caractere de uma linha de correspondência

1

Como usar sed para alterar o último caractere de uma linha de correspondência?

Exemplo: / etc / network / interfaces

auto eth0
iface eth0 inet static
        address 150.0.3.50
        netmask 255.255.255.0
        network 150.0.3.0
        gateway 150.0.3.6


auto eth.....

Como posso alterar apenas o octeto do host do gateway? Tenho muitas máquinas para fazer isso e cada uma está em uma rede diferente, mas o octeto do gateway é sempre o mesmo.

    
por rodolpho 08.03.2015 / 01:05

1 resposta

1

Se o seu gateway for 150.0.3.254 Você pode fazer assim:

sed -i -E 's/([ \t]+gateway[ \t])+[0-9.]+/50.0.3.254/' /etc/network/interfaces

Deixe-me explicar como funciona:

  • -i - > Significa substituir o arquivo
  • -E - > Use expressões regulares estendidas, evita caracteres especiais como ( to \(
  • 's/<PATTERN>/<REPLACEMENT>/' -> the s 'significa substituição do padrão para o replacemnet
  • [ \t]+ - > Espaço ou Tab uma ou mais ocorrências.
  • [0-9.]+ - > Números de 0 a 9 e pontuam uma ou mais ocorrências (para o ip)
  • (PATTERN) - > O padrão dentro de () é armazenado como grupo 1 , portanto, ele será usado na substituição (neste caso, espaços ou tabulações + "gateway" + espaços ou tabulações)
  • 150.0.3.254 - > É o gateway desejado

Atenciosamente

    
por 11.06.2015 / 04:32