Sed dando erro ao receber entrada da linha de comando

Sed dando erro ao receber entrada da linha de comando

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 scomando 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.

informação relacionada