Sed: opção desconhecida para 's'

1

Estou tentando alterar um arquivo de configuração usando o script bash. Estou usando o comando sed para mudar como abaixo.

VAR1=$(cat postgresql.conf | grep "shared_buffers =" | cut -d# -f1)
VAR2=$(shared_buffers = 8GB)
sed -ie s/${VAR1}/${VAR2}/g postgresql.conf 

Eu tentei, mas isso me deu um erro.

sed: -e expression #1, char 29: unknown option to 's'

O que está faltando?

    
por Lee 24.08.2016 / 17:12

1 resposta

4

A causa comum é que uma (ou ambas) de suas variáveis contém o delimitador (no seu caso / ). Você pode

  • altere o delimitador se você tiver um caractere alternativo que não esteja presente:

    sed -e "s#${VAR1}#${VAR2}#g"
    

    ou

  • substitua o delimitador nas variáveis:

    sed -e "s/${VAR1//\//\/}/${VAR2//\//\/}/g"
    

Pode haver outras substituições que você também precise fazer em $VAR1 se quiser que elas correspondam como um literal, pois s/// sempre usa expressões regulares.

No entanto, olhando para o que você nos mostrou, parece que tudo o que você está tentando fazer é alterar o valor atribuído a shared_buffers no arquivo de configuração para o valor fixo 8GB . Nesse caso, não há necessidade de quaisquer variáveis:

sed -i -e '/^shared_buffers[ \t]/s/=[ \t]*[^# \t]\+/= 8GB/' /postgresql.conf

Você pode ler isso como em todas as linhas que começam com shared_buffers e um espaço horizontal, em seguida, substitua o primeiro = e a palavra que segue com = 8GB , que é o que você parece querer.

    
por 24.08.2016 / 17:37