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

J'essaie d'utiliser

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

Cependant, je reçois 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?

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

101
sed
demandé sur codeforester 2012-02-20 22:58:50

1 réponses

Le problème est avec des barres obliques: votre variable Les contient et la commande finale sera quelque chose comme sed "s/string/path/to/something/g", contenant beaucoup trop de barres obliques.

Puisque sed peut prendre n'importe quel caractère comme délimiteur, vous pouvez essayer d'en utiliser un autre qui n'apparaît pas dans votre chaîne de remplacement:

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

Notez que ce n'est pas une preuve de balle: si la chaîne de remplacement contient plus tard @, elle se cassera pour la même raison, et toute séquence antislash comme \1 sera toujours interprétée en fonction de règles sed.

241
répondu AoeAoe 2018-01-11 18:40:10