我编写了一个非常简单的脚本,它将字符串作为输入并通过 sed 替换文件中的输入文本。但我总是收到错误
sed: -e expression #1, char 40: unknown option to `s'
shell脚本如下
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
该字符串包含未转义的//
.插入字符串后,第一个将关闭替换,第二个将是未知选项。
您要么必须使用反斜杠将斜杠转义为 sed (需要转义到 shell,因此您需要双反斜杠,从而导致丑陋,\\/\\/
或者更好地对s
不属于字符串一部分的命令使用不同的分隔符,例如
sed -i "s_c9_$1_g" Test.java
这样斜杠就失去了它们的特殊含义。