Zuerst gibt es eine Variable, die Sonderzeichen im Bash-Skript enthält. Hier ist das Beispiel. list.txt:
user = root
password = 1234
Bash-Skript:
#!/bin/sh
var1 = var&2018+&
find . -name "list.txt" -exec sed -i "s/1234/"$var1"/g" {} +
als ich das Skript ausführte, war das Ergebnis: var12342018+1234.
Update 1 (Antwort von Oliv):
var1='var&2018+&'
find . -name "*list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;
und das Ergebnis immer noch: Passwort = var12342018+1234
vielleicht kann mir jemand helfen. danke
Antwort1
Zuerst müssen Sie Ihre var1
Variable in Anführungszeichen setzen.
Um das Passwort als Variable anzugeben, können Sie bash -c
in Ihrem Befehl Folgendes verwenden:find
var1='var\&2018+\&'
find . -name "list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;
Antwort2
Es könnte Ihnen helfen, Ihr Problem zu verstehen, wenn Sie wissen, dass es &
sich um ein Sonderzeichen handelt, das die gesamte Übereinstimmung Ihres regulären Ausdrucks darstellt.
Da 1234
gefunden wird, ersetzen Sie es durch var12342018+1234
. Die beiden &
werden zur übereinstimmenden Zeichenfolge.
Der andere Punkt, den ich ansprechen möchte, ist wirklich eine persönliche Vorliebe, aber die Verwendung von find ... -exec
with {}
, ich mag diese Syntax nicht, ich beende es normalerweise mit\;
Ich bevorzuge die Verwendung von xargs
find . -name list.txt | xargs sed -i 's/1234/var&2018+&/g'
Beachten Sie, dass die Endung „g“ es so oft ersetzt, wie es gefunden wird …
auch das dürfte offensichtlich sein.. Ich weiß nicht, wie viele list.txt
Dateien Sie in Ihrem Unterbaum haben, aber wenn Sie nur eine haben, brauchen Sie sie nicht find
.
sed -i 's/pattern/replacement/options' filename