Sed não substitui o texto corretamente

0

Estou tentando executar o sed para substituir algum texto em um arquivo, e eu quebrei o texto separadamente, executei sed nele individualmente para garantir que tudo fosse escapado corretamente e funcionasse. Quando eu coloco tudo de volta, isso não muda nada. Alguém pode me dizer o que estou fazendo errado?

Este é o comando que estou executando

sed -i -e 's/"php"   => \x27\x27,/"php"   => \x27\/opt\/remi\/php70\/root\/usr\/sbin\/php-fpm\x27,/g'

É suposto mudar

"php"   => '',

para

"php"   => '/opt/remi/php70/root/usr/sbin/php-fpm',

Eu achei que poderia ter algo a ver com espaço em branco devido a como o código é recuado ou algo em que eu tentei algumas coisas, mas não estou chegando a lugar nenhum.

Está em um bloco assim:

    $pathToExternals = array(
            "php"   => '',                  // Something like /usr/bin/php. If empty, will be found in PATH.
            "curl"  => '',                  // Something like /usr/bin/curl. If empty, will be found in PATH.
            "gzip"  => '',                  // Something like /usr/bin/gzip. If empty, will be found in PATH.
            "id"    => '',                  // Something like /usr/bin/id. If empty, will be found in PATH.
            "stat"  => '',                  // Something like /usr/bin/stat. If empty, will be found in PATH.
    );

Todos os ponteiros seriam muito apreciados!

Obrigado

    
por Zac1989 07.05.2018 / 01:40

1 resposta

1

Parece que seu arquivo de origem pode ter algumas guias enquanto o comando sed assume apenas espaços em branco. Para fazer a substituição, independentemente de o espaço em branco consistir em espaços em branco ou tabulações, tente:

sed -i -e 's/"php"[[:space:]]*=>[[:space:]]*\x27\x27,/"php" => \x27\/opt\/remi\/php70\/root\/usr\/sbin\/php-fpm\x27,/g'

[[:space:]]* corresponde a zero ou mais de qualquer caractere de espaço em branco.

Como alhadis aponta, podemos evitar a necessidade de escapar de / se usarmos um delimitador diferente para o substituir o comando. Por exemplo, podemos escolher | :

sed  -e 's|"php"[[:space:]]*=>[[:space:]]*\x27\x27,|"php"   => \x27/opt/remi/php70/root/usr/sbin/php-fpm\x27,|g'
    
por 07.05.2018 / 03:06

Tags