sed - por que isso não funciona?

1

Estou apenas tentando substituir uma configuração em um arquivo php.ini usando um script bash.

Este é o meu caso:

Eu tenho uma configuração muito específica e o padrão é:

;date.timezone =

Agora, estou tentando substituir por sed para isso:

date.timezone = "America/Mexico_City"

E o comando que estou tentando usar é o seguinte:

sed -i '/^;date\.timezone[[:space:]]=.*$/date.timezone = "America/Mexico_City"' php.ini

Mas eu entendo isso:

sed: -e expression #1, char 35: extra characters after command

Eu realmente não sei porque, mas se eu deixar apenas um caractere, ele funciona (não da maneira esperada, mas não retorna um erro). Exemplo:

sed -i '/^;date\.timezone[[:space:]]=.*$/d' php.ini

Isso apenas remove a linha ;date.timezone =

Sou muito novo para sed e realmente agradeço qualquer ajuda.

Obrigado

    
por MikeVelazco 06.01.2017 / 02:23

1 resposta

6

Você está tentando s ubstitutar um padrão para outro, então você precisa usar o comando sed s , do formulário

's/pattern/replacement/'

Além disso, você precisa escapar de todos os caracteres / dentro do padrão ou das strings de substituição (no seu caso, "America\/Mexico_City" ). Então

sed 's/^;date\.timezone[[:space:]]=.*$/date.timezone = "America\/Mexico_City"/'

Como alternativa, você pode evitar barras de escape usando um delimitador de substituição de padrão diferente, como s#pattern#replacement# , por exemplo,

sed 's#^;date\.timezone[[:space:]]=.*$#date.timezone = "America/Mexico_City"#'
    
por 06.01.2017 / 02:29

Tags