2012-02-20 13 views
82

Estoy intentando utilizarsed - opción desconocida para `s'

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 este 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\"

+6

El mensaje de error * BSD (incluido OSX) es "bad flag in substitute command:" - incluyéndolo aquí para hacer esto algo más googlable. – tripleee

Respuesta

201

El problema está en las barras diagonales: su variable las contiene y el comando final será algo así como sed "s/string/path/to/something/g", que contiene demasiadas barras inclinadas.

Desde sed puede tomar cualquier carbón como delimitador, puede probar a usar otra que no aparece en su cadena de reemplazo:

replacement="/my/path" 
sed -e "[email protected]@[email protected]" 

Tenga en cuenta que esto no es a prueba de balas: si la cadena de reemplazo contiene más tarde @ se romperá por la misma razón, y cualquier secuencia de barra invertida como \1 se interpretará de acuerdo con las reglas de sed.

+26

Solo una nota para ayudar a los futuros usuarios, ya que también encontré esta respuesta útil. El póster original muy probablemente tenía algo en su reemplazo (muy probablemente oculto en la variable) que contenía barras diagonales. Después de que se encontró la primera de esas barras, se consideró el reemplazo terminado, y lo que viene después como una opción (como 'g'). –

+0

Ahh sí, después de mirar 10 veces, veo la barra. Entonces, ¿cómo lo arreglo entonces? – ppumkin

+3

Bien hecho (Solo recuerda envolver las expresiones variables con '" 'not' ''de lo contrario obtendrás mucho' $ content' en tu resultado final en lugar del contenido de '$ content' :)) –