我編寫了一個非常簡單的腳本,它將字串作為輸入並透過 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
這樣斜槓就失去了它們的特殊意義。