Ich versuche das folgende Bash-Skript zu schreiben:
HOME_DIR=/opt/my_home
find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/$_HOME_DIR/g" {} \;
Die Zeile, die in den Dateien geändert werden soll, lautet wie folgt:
users = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"
Das Endergebnis muss also sein:
users = "/opt/my_home/config/data/_DOMAIN_/users.conf"
Aber ich verstehe das nicht ... Ich denke, es liegt an Fluchtzeichen ...
Kann jemand Licht ins Dunkel bringen?
Vielen Dank
command-line
scripts
sed
Felipe Caldas
quelle
quelle
Antworten:
In Fällen, in denen die Ersetzungszeichenfolge oder die Musterzeichenfolge Schrägstriche enthält, können Sie die Tatsache nutzen, dass GNU sed einen alternativen Begrenzer für den Ersetzungsbefehl zulässt. Häufige Auswahlmöglichkeiten für das Trennzeichen sind das Pipe-Zeichen
|
oder der Hash.#
Die beste Auswahl für das Trennzeichen hängt häufig vom Typ der zu verarbeitenden Datei ab. In deinem Fall kannst du es versuchenBeachten Sie auch, dass Sie den Variablennamen $ HOME_DIR falsch eingegeben haben (dieser beginnt nicht mit einem Unterstrich).
Wenn Sie möchten, sollten Sie die Verwendung von Großbuchstaben für Benutzervariablen in Ihrem Skript vermeiden. Diese sollten für Systemvariablen reserviert sein. Außerdem ist der
g
Schalter nur erforderlich, wenn Sie mehrere Ersetzungen in einer einzelnen Zeile vornehmen möchten.quelle
Das Hardcodieren der Variablen 'opt / home' funktioniert folgendermaßen.
quelle