Sed gibt einen Fehler aus, wenn Eingaben von der Befehlszeile übernommen werden

Sed gibt einen Fehler aus, wenn Eingaben von der Befehlszeile übernommen werden

Ich habe ein sehr einfaches Skript geschrieben, das eine Zeichenfolge als Eingabe verwendet und den Eingabetext in einer Datei über sed ersetzt. Aber ich erhalte immer einen Fehler

sed: -e expression #1, char 40: unknown option to `s'

Das Shell-Skript lautet wie folgt

sed -i "s/c9/$1/g" Test.java 

und laufen

./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();"

Antwort1

Die Zeichenfolge enthält unescaped //. Nach dem Einfügen der Zeichenfolge schließt der erste die Ersetzung, der zweite ist die unbekannte Option.

Sie müssen die Schrägstriche entweder mit Backslashes an sed maskieren (die wiederum an die Shell maskiert werden müssen, daher benötigen Sie doppelte Backslashes, was zu hässlichen Ergebnissen führt) \\/\\/oder besser ein anderes Trennzeichen für den sBefehl verwenden, das nicht Teil der Zeichenfolge ist, wie

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

Dadurch verlieren die Schrägstriche ihre besondere Bedeutung.

verwandte Informationen