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 s
comando 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.