Pourquoi sed affiche "char 53: commande` s 'non terminée "

28

Pourquoi ce script bash

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

sortie ->

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

Réponses:

38

La scommande dans sed, utilise une syntaxe spécifique:

s/AAAA/BBBB/options

sest la commande de substitution, AAAAest le regex que vous souhaitez remplacer, BBBBest avec ce que vous voulez qu'il soit remplacé et optionsest l'une des options de la commande de substitution, telles que global ( g) ou ignore case ( i).

Dans votre cas spécifique, il vous manquait la barre oblique finale /, si vous l'ajoutez, sedcela fonctionnera très bien:

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

info sed 'The "s" Command' inclut la description complète et l'utilisation de la commande s.

Braiam
la source
9

Manquant /à la fin.

sed -i "s/database_name: [^ ]*/database_name: kartable_$ME/" $PARAM_FILE
jherran
la source
1
il manquait le /pas le g, gc'est pour le global qui peut ne pas être souhaité.