コマンドラインから入力を受け取ると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 が含まれています//。文字列を挿入した後、最初の文字列は置換がオフになり、2番目の文字列は不明なオプションになります。

スラッシュをsedにエスケープするには、バックスラッシュを使用する必要があります(シェルでエスケープする必要があるため、二重バックスラッシュが必要なので醜い結果が発生します)。文字列の一部ではないコマンドに別の区切り文字を使用することをお勧めし\\/\\/ます。sはい

sed -i "s_c9_$1_g" Test.java

その後、スラッシュは特別な意味を失います。

おすすめ記事