J'essaye d'utiliser
sed -i -e "s/.*seb.*/ \"$ftp_login_template\"/" $ftp_dir
cependant 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\"
Réponses:
Le problème est avec les 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 vous
sed
pouvez prendre n'importe quel caractère comme délimiteur (sans avoir à déclarer le nouveau délimiteur), vous pouvez essayer d'en utiliser un autre qui n'apparaît pas dans votre chaîne de remplacement:Notez que ce n'est pas à l'épreuve des balles: si la chaîne de remplacement la contient plus tard,
@
elle sera cassée pour la même raison, et toute séquence de barre oblique inverse comme\1
sera toujours interprétée selon lessed
règles. L'utilisation|
comme délimiteur est également une option intéressante car sa lisibilité est similaire à/
.la source
g
)."
pas'
sinon vous en aurez beaucoup$content
dans votre résultat final au lieu du contenu de$content
:))sed -i "s/../../g"
avec un caractère différent ie :,sed -i "s@...@...@g"
alors le problème des barres obliques multiples devrait disparaître. Et si vous utilisez au"
lieu de'
cela devrait fonctionner aussi bien avec les variables à l' intérieur, à savoir:export var1=bar; sed -i "s@foo@${var1}@g"
. Plus d'informations, vous pouvez trouver dans la superbe documentation sed: grymoire.com/Unix/Sed.htmlinfo sed
(source: unix.stackexchange.com/questions/259083/… ): "La syntaxe de la commande s (comme dans un substitut) est 's / regexp / replacement / flags'. Les caractères / peuvent être uniformément remplacés par tout autre caractère unique dans une commande donnée. "