Ich versuche zu benutzen
sed -i -e "s/.*seb.*/ \"$ftp_login_template\"/" $ftp_dir
Ich erhalte jedoch diesen Fehler:
sed: -e expression #1, char 34: unknown option to `s'
Ich verstehe nicht warum, da dies perfekt funktioniert:
sed -i -e "s/.*wbspassword.*/ \"wbspassword\": \"$password\",/" $user_conf
Irgendwelche Ideen, was ich falsch mache?
Könnte dies das Problem sein?
ftp_login_template=\${user}:${password}:24:86::\/var\/lib\/clit.${user}\/downloads:\/bin\/false\"
Antworten:
Das Problem liegt bei Schrägstrichen: Ihre Variable enthält sie und der letzte Befehl
sed "s/string/path/to/something/g"
enthält etwa zu viele Schrägstriche.Da
sed
jedes Zeichen als Trennzeichen verwendet werden kann (ohne das neue Trennzeichen deklarieren zu müssen), können Sie versuchen, ein anderes Zeichen zu verwenden, das nicht in Ihrer Ersatzzeichenfolge enthalten ist:Beachten Sie, dass dies kein Aufzählungszeichen ist: Wenn die Ersatzzeichenfolge später enthält
@
, wird sie aus demselben Grund unterbrochen, und alle Backslash-Sequenzen wie\1
werden weiterhin gemäß densed
Regeln interpretiert . Die Verwendung|
als Trennzeichen ist ebenfalls eine gute Option, da die Lesbarkeit ähnlich ist wie/
.quelle
g
)."
nicht zu verpacken,'
sonst erhalten Sie viel$content
in Ihrem Endergebnis anstelle des Inhalts von$content
:))sed -i "s/../../g"
durch ein anderes Zeichen, dh:sed -i "s@...@...@g"
Dann sollte das Problem mehrerer Schrägstriche verschwinden. Und wenn Sie"
stattdessen verwenden'
, sollte es auch gut mit Variablen im Inneren funktionieren, dh :export var1=bar; sed -i "s@foo@${var1}@g"
. Weitere Informationen finden Sie in der fantastischen Sed-Dokumentation: grymoire.com/Unix/Sed.htmlinfo sed
(Quelle: unix.stackexchange.com/questions/259083/… ): "Die Syntax des Befehls s (als Ersatz) lautet 's / regexp / replace / flags'. Die / -Zeichen können einheitlich durch andere ersetzt werden einzelnes Zeichen innerhalb eines bestimmten s-Befehls. "