Я написал очень простой скрипт, который принимает строку в качестве входных данных и заменяет входной текст в файле через 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
Таким образом, косые черты теряют свое особое значение.