Por que o sed gera "char 53: comando` s 'não terminado "

28

Por que esse script bash

ssh $SERVER bash <<EOF
sed -i "s/database_name: [^ ]*/database_name: kartable_$ME" $PARAM_FILE
exit
EOF

saída ->

sed: -e expression #1, char 53: unterminated `s' command
me987654323
fonte

Respostas:

38

O scomando in sedusa uma sintaxe específica:

s/AAAA/BBBB/options

onde sestá o comando de substituição, AAAAé o regex que você deseja substituir, BBBBestá com o que deseja que seja substituído e optionsé uma das opções do comando de substituição, como global ( g) ou ignorar maiúsculas e minúsculas ( i).

No seu caso específico, estava faltando a barra final /, se você a adicionar, sedfuncionará perfeitamente:

➜  ~  sed 's/database_name: [^ ]*/database_name: kartable_$ME/'
database_name: something
database_name: kartable_$ME

info sed 'The "s" Command' inclui a descrição completa e o uso do comando s.

Braiam
fonte
9

Desaparecido /no final.

sed -i "s/database_name: [^ ]*/database_name: kartable_$ME/" $PARAM_FILE
jherran
fonte
1
estava faltando o /not the g, gé global, o que pode não ser desejado.