Sed dando erro ao receber entrada da linha de comando [duplicado]

0
    

Esta pergunta já tem uma resposta aqui:

    

Eu escrevi um script muito simples que pega uma string como entrada e substitui o texto de entrada em um arquivo via sed. Mas recebo sempre um erro

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

O script da shell é como abaixo

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

e para executar

./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();"
    
por je2tdam 24.05.2017 / 01:23

1 resposta

0

A string contém // sem escape. Após inserir a string, o primeiro fechará a substituição, o segundo será a opção desconhecida.

Você precisa escapar das barras com barras invertidas para sed (que precisam ser escapadas para o shell, portanto, você precisa de barras duplas invertidas, resultando em feio \/\/ ou melhor usar um delimitador diferente no comando s , que não faz parte da string como

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

Desta forma, as barras perdem seu significado especial.

    
por 24.05.2017 / 05:09

Tags