從命令列取得輸入時 Sed 給出錯誤

從命令列取得輸入時 Sed 給出錯誤

我編寫了一個非常簡單的腳本,它將字串作為輸入並透過 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

這樣斜槓就失去了它們的特殊意義。

相關內容