Sed выдает ошибку при вводе данных из командной строки

Sed выдает ошибку при вводе данных из командной строки

Я написал очень простой скрипт, который принимает строку в качестве входных данных и заменяет входной текст в файле через sed. Но я всегда получаю ошибку

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

Скрипт оболочки выглядит следующим образом:

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

и бежать

./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();"

решение1

Строка содержит unescaped //. После вставки строки первый закроет подстановку, второй будет неизвестной опцией.

Вам либо придется экранировать слеши обратными слешами в sed (которые нужно экранировать в оболочке, поэтому вам нужны двойные обратные слеши, что приведет к уродливому результату), \\/\\/либо лучше использовать другой разделитель для sкоманды, который не является частью строки, например

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

Таким образом, косые черты теряют свое особое значение.

Связанный контент