Estoy tratando de usar
sed -i -e "s/.*seb.*/    \"$ftp_login_template\"/" $ftp_dir
Sin embargo me sale este error:
sed: -e expression #1, char 34: unknown option to `s'
No entiendo por qué, ya que esto funciona perfectamente:
sed -i -e "s/.*wbspassword.*/    \"wbspassword\": \"$password\",/" $user_conf
¿Alguna idea de lo que estoy haciendo mal?
¿Podría ser este el problema?
    ftp_login_template=\${user}:${password}:24:86::\/var\/lib\/clit.${user}\/downloads:\/bin\/false\"

Respuestas:
El problema está en las barras inclinadas: su variable las contiene y el comando final será algo así
sed "s/string/path/to/something/g", que contiene demasiadas barras inclinadas.Como
sedpuede tomar cualquier carácter como delimitador (sin tener que declarar el nuevo delimitador), puede intentar usar otro que no aparezca en su cadena de reemplazo:Tenga en cuenta que esto no es a prueba de balas: si la cadena de reemplazo que contiene más
@adelante se romperá por la misma razón, y cualquier secuencia de barra invertida como\1se seguirá interpretando de acuerdo con lassedreglas. Usar|como delimitador también es una buena opción, ya que es similar en legibilidad a/.fuente
g)."lo'contrario obtendrá mucho$contenten su resultado final en lugar del contenido de$content:))sed -i "s/../../g"con un carácter diferente, es decirsed -i "s@...@...@g", entonces, el problema de las barras múltiples debería desaparecer. Y si se utiliza"en lugar de'lo que debería también funciona bien con las variables en el interior, es decir:export var1=bar; sed -i "s@foo@${var1}@g". Puede encontrar más información en la impresionante documentación de sed: grymoire.com/Unix/Sed.htmlinfo sed(fuente: unix.stackexchange.com/questions/259083/… ): "La sintaxis del comando s (como sustituto) es 's / regexp / replace / flags'. Los caracteres / pueden ser reemplazados uniformemente por cualquier otro carácter único dentro de cualquier comando de s ".