Eu escrevi um script muito simples que recebe uma string como entrada e substitui o texto de entrada em um arquivo via sed. Mas sempre recebo um erro
sed: -e expression #1, char 40: unknown option to `s'
O script Shell é como abaixo
sed -i "s/c9/$1/g" Test.java
e para 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();"
Responder1
A string contém //
. Após inserir a string a primeira fechará a substituição, a segunda será a opção desconhecida.
Você tem que escapar das barras com barras invertidas para sed (que precisa ser escapado para o shell, então você precisa de barras invertidas duplas, resultando em feio \\/\\/
ou é melhor usar um delimitador diferente para o s
comando que não faz parte da string como
sed -i "s_c9_$1_g" Test.java
Desta forma, as barras perdem o seu significado especial.