GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verwende ich sed, um meine Konfigurationsdateien mit flexiblen Schlüsseln und Werten zu ändern?

sed -i -e '/central\.database =/ s/= .*/= new_value/' /path/to/file

Erklärung:

  • -i weist sed an, die Ergebnisse in der Eingabedatei zu speichern. Ohne es wird sed die Ergebnisse auf stdout ausgeben.
  • /central\.database =/ entspricht Zeilen, die die Zeichenfolge zwischen Schrägstrichen enthalten:central.database = . Die . wird maskiert, da es sich um ein Sonderzeichen in Regex handelt.
  • Die s/OLD/NEW/ Teil führt ein s aus Ersatz. Der OLD-String ist ein regulärer Ausdruck zum Abgleichen und der NEW part ist die zu ersetzende Zeichenkette.
  • In regulären Ausdrücken .* bedeutet "mit allem übereinstimmen". Also = .* entspricht einem Gleichheitszeichen, einem Leerzeichen und danach irgendetwas anderem.

Hier ist ein Beispielausdruck:

sed -i 's/^\(central\.database\s*=\s*\).*$/\1SQLTEST/' file.cfg

Wenn Sie Inhalte mit / abgleichen möchten darin können Sie ein anderes Trennzeichen verwenden:

sed -i 's#^\(cent/ral\.data/base\s*=\s*\).*$#\1SQL/TEST#' file.cfg

Oder mit variabler Erweiterung:

VAL="SQLTEST"
sed -i "s/^\(central\.database\s*=\s*\).*\$/\1$VAL/" file.cfg

In Ihrem Beispiel:

sshRetValue=`sed -i "s/^\(\1$CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt`;

Vor $CENTRAL_DB_NAME steht ein ungültiges \1. Außerdem gibt sed seinen Rückgabewert nicht aus. Dies ist die bevorzugte Methode, um Rückgabewerte zu überprüfen:

sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
sed_return_value=$?

Und schließlich die Weiterleitung an ssh (nicht getestet):

sed_return_value=$(ssh server <<EOF
    sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
    echo $?
EOF
)

Das -i dient zum Ersetzen von Daten in der Eingabedatei. Andernfalls schreibt sed nach stdout.

Reguläre Ausdrücke sind ein eigenes Feld. Es wäre unmöglich, sie in einer Stackoverflow-Antwort ausführlich zu erklären, es sei denn, es gibt eine bestimmte Funktion, die sich Ihnen entzieht.


Linux
  1. So finden Sie Dateien mit SUID- und SGID-Berechtigungen in Linux

  2. So verwenden Sie den Sed-Befehl unter Linux mit Beispielen

  3. So komprimieren Sie Dateien und Verzeichnisse unter Linux (mit Beispielen)

  4. So finden Sie große Dateien unter Linux mit den Befehlen find und du

  5. Wie verschiebt man Dateien und zeigt den Fortschritt an (z. B. mit einem Fortschrittsbalken)?

So verwenden Sie den cp-Befehl zum Kopieren von Dateien und Verzeichnissen

So verwenden Sie den Gunzip-Befehl unter Linux mit Beispielen

So verwenden Sie den SED-Befehl zum Suchen und Ersetzen von Zeichenfolgen in Dateien

So installieren und verwenden Sie Alpine mit Gmail IMAP unter Linux

Farbschemata in Vim:Wie man sie ändert und verwendet

So verwenden Sie Sed zum Suchen und Ersetzen einer Zeichenfolge in einer Datei