it-swarm.com.de

Wie benutze ich sed, um die Variable einer Konfigurationsdatei zu ersetzen?

Ich habe online nach dieser Antwort gesucht und kann sie anscheinend nicht finden.

Ich habe eine Konfigurationsdatei, die enthält:

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6

Und ich möchte den Wert von VAR5 von VALUE5 auf VALUE10 ändern. Leider kenne ich den Wert von VALUE5 nicht und kann daher nicht danach suchen. Im Grunde muss ich sed (oder was auch immer) verwenden, um den Wert von VAR5 durch den Wert zu ersetzen, durch den ich ihn ersetzen möchte.

26

Sie können diese sed versuchen:

sed -i.bak 's/^\(VAR5=\).*/\1VALUE10/' file

Es gibt:

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
43
anubhava

Auch wenn die Antwort der Frage hinzugefügt wurde. Ich habe einige Zeit damit verbracht, wie es funktioniert. Ich möchte einige Fakten und meine Version der Antwort hinzufügen.

sed -i 's,^\(THISISMYVARIABLE[ ]*=\).*,\1'THISISMYVALUE',g' config.cfg

Erklärung:

  • Als Basis von sed 's/find_this/replace_with/' Sagen wir sed zum Suchen und Ersetzen. Denken Sie auch daran, dass wir anstelle von / Mehrere andere Trennzeichen verwenden können. Hier wird , Verwendet.
  • Hier finden wir die Zeile, die ^\(THISISMYVARIABLE[ ]*=\).* entspricht. Das heißt, wir gruppieren die Übereinstimmung THISISMYVARIABLE[ ]*=. ([ ]*, Um zu verdecken, ob nach dem Schlüssel Leerzeichen stehen)
  • Im Ersetzungsabschnitt ist \1 Eine Rückreferenz. Wir verweisen auf die erste Gruppe im regulären Ausdruck, die wir für die Übereinstimmung verwendet haben.
4

Sie können sagen:

sed '/^VAR5=/s/=.*/=VALUE10/' filename

Um die Änderung an der Datei vorzunehmen an Ort und Stelle, verwenden Sie das -i Möglichkeit:

sed -i '/^VAR5=/s/=.*/=VALUE10/' filename
3
devnull
sed '/\(^VAR5=\).*/ s//\1VALUE10/' YourFile

Unter AIX/KSH

$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6

$ sed '/\(^VAR5=\).*/ s//\1VALUE10/' sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6

und für den Austausch in der Datei

cat <> YourFile | sed '/\(^VAR5=\).*/ s//\1VALUE10/'

$ cat <> sample.txt | sed '/\(^VAR5=\).*/ s//\1VALUE10/'
$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6

POSIX-konform (auf sed Teil, nicht cat) sein (sed --posix on gnu sed und native traditionnal sed on non linux system)

1
NeronLeVelu

Versuche Folgendes

sed -r 's/^ (VAR5 =). */\ 1REPLACEMENT /'

Der Wert von VAR5 wird durch REPLACEMENT ersetzt.

0
Vlad.Bachurin