Sed da error al recibir información desde la línea de comando

Sed da error al recibir información desde la línea de comando

He escrito un script muy simple que toma una cadena como entrada y reemplaza el texto de entrada en un archivo mediante sed. Pero siempre me sale un error

sed: -e expression #1, char 40: unknown option to `s'

El script de Shell es el siguiente

sed -i "s/c9/$1/g" Test.java 

y correr

./code.sh "lmc.driver.findElement(By.xpath(\"//*[@id=\\\"login-email\\\"]\")).clear();\n                        lmc.driver.findElement(By.xpath(\"//*[@id=\\\"login-email\\\"]\")).sendKeys(username);\n                        lmc.driver.findElement(By.xpath(\"//*[@id=\\\"login-password\\\"]\")).clear();\n                        lmc.driver.findElement(By.xpath(\"//*[@id=\\\"login-password\\\"]\")).sendKeys(password);\n                        lmc.driver.findElement(By.xpath(\"//*[@id=\\\"loginForm\\\"]/div[3]\")).click();\n                        lmc.driver.findElement(By.xpath(\"//*[@id=\\\"login-identity-domain\\\"]\")).clear();\n                        lmc.driver.findElement(By.xpath(\"//*[@id=\\\"login-identity-domain\\\"]\")).sendKeys(tenantId);\n                        
lmc.driver.findElement(By.xpath(\"//*[@id=\\\"loginBtn\\\"]\")).click();"

Respuesta1

La cadena contiene archivos sin escape //. Después de insertar la cadena, la primera cerrará la sustitución, la segunda será la opción desconocida.

Tienes que escapar de las barras con barras invertidas para sed (que deben escaparse al shell, por lo que necesitas barras invertidas dobles, lo que resulta feo \\/\\/o, mejor, usa un delimitador diferente al scomando que no es parte de la cadena como

sed -i "s_c9_$1_g" Test.java

De esta forma las barras pierden su significado especial.

información relacionada