SED para encontrar e substituir a palavra exata que começa com $

0

Meu arquivo php tem algumas variáveis definidas com $ downtime_hosts, o que eu preciso é de um único comando para encontrar e substituir todo o $downtime_hosts = 8; em $downtime_hosts = 15; e sem afetar o outro $downtime_hosts usado várias vezes dentro do arquivo.

aqui meu número 8,15,16 pode mudar a qualquer momento, o que eu preciso é encontrar a linha que começa com $downtime_hosts = anyinteger e simplesmente substituir por minha nova linha $ downtime_hosts = newinteger. por favor, note anyinteger / newinteger=2,3,4,15 ou qualquer

$downtime_hosts = 8;

$total_hosts = $all_hosts - $downtime_hosts;

if ($host_up == $total_hosts )

Hosts under downtime $downtime_hosts '

Quaisquer insumos são realmente bem-vindos!

    
por Kunal Saha 21.01.2017 / 20:59

1 resposta

4

sed 's/$downtime_hosts = 8;/$downtime_hosts = 15;/' file.php

O $ não representa problema, pois não atuará como uma âncora, a menos que seja encontrado no final do padrão. O script sed precisa estar entre aspas simples, embora o shell tente expandir o $downtime_hosts como uma variável shell.

Para corresponder apenas ao padrão no começo de uma linha:

sed 's/^$downtime_hosts = 8;/$downtime_hosts = 15;/' file.php

Se o inteiro 8 puder ser qualquer inteiro:

sed 's/^$downtime_hosts = [0-9]*;/$downtime_hosts = 15;/' file.php

Para substituir o inteiro por um inteiro mantido por uma variável do shell $newint :

sed "s/^\$downtime_hosts = [0-9]*;/\$downtime_hosts = $newint;/" file.php

Observe que agora precisamos usar aspas duplas ao redor do script de edição sed do shell para expandir a variável $newint . Isso também significa que somos forçados a escapar dos dois $ existentes do shell.

    
por 21.01.2017 / 21:04

Tags