web-dev-qa-db-fra.com

sed échoue avec l'erreur "option inconnue à` s '"

J'essaie d'utiliser

sed -i -e "s/.*seb.*/    \"$ftp_login_template\"/" $ftp_dir

mais j'obtiens cette erreur:

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

Je ne comprends pas pourquoi puisque cela fonctionne parfaitement:

sed -i -e "s/.*wbspassword.*/    \"wbspassword\": \"$password\",/" $user_conf

Des idées sur ce que je fais mal?

Est-ce que ceci pourrait être le problème? ftp_login_template=\${user}:${password}:24:86::\/var\/lib\/clit.${user}\/downloads:\/bin\/false\"

132
Mr. King

Le problème vient des barres obliques: votre variable les contient et la dernière commande sera quelque chose comme sed "s/string/path/to/something/g", Contenant trop de barres obliques.

Puisque sed peut prendre n’importe quel caractère comme séparateur, vous pouvez en utiliser un autre qui ne figure pas dans la chaîne de remplacement:

replacement="/my/path"
sed -e "s@pattern@$replacement@"

Notez que ce n’est pas une preuve irréfutable: si la chaîne de remplacement contient plus tard @, Elle se cassera pour la même raison et toute séquence de barre oblique inversée telle que \1 Sera toujours interprétée conformément aux règles sed.

303
pruzinat