문자열을 입력으로 사용하고 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
그러면 슬래시는 특별한 의미를 잃습니다.