从命令行获取输入时 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

这样斜杠就失去了它们的特殊含义。

相关内容