명령줄에서 입력을 받을 때 Sed에서 오류가 발생함

명령줄에서 입력을 받을 때 Sed에서 오류가 발생함

문자열을 입력으로 사용하고 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

이렇게 하면 슬래시가 특별한 의미를 잃습니다.

관련 정보