Ich versuche, eine Konfigurationsvariable in einer Datei zu ändern. Im Wesentlichen besteht die Datei aus mehreren Zeilen in diesem Format:
$config['var'] = 'val';
Die gewünschte Ausgabe:
$config['var'] = 'new_value';
Das ist, was mir bisher eingefallen ist:
sed -i -r "s/^\$config\['var'\]\s*=\s*(..*);$/\1'new_value'/g" config.cfg
Ich habe versucht, Antworten auf scheinbar unzählige ähnliche Fragen hier zu finden, aber hatte kein Glück. Irgendwelche Hinweise, was ich falsch machen könnte?
Antwort1
Sie müssen config
oder nicht var
in das Suchmuster aufnehmen. Verwenden Sie /^$config\['var'\]/
before, s/…/…/
um Suchen und Ersetzen nur in Zeilen durchzuführen, die mit beginnen $config['var']
. Dies erleichtert die gesamte Aufgabe.
sed "/^\$config\['var'\]/ s/=.*;/= 'new_value';/"
Hinweis $
wird aufgrund von Anführungszeichen maskiert. Es wird nicht mehr maskiert, wenn es zu kommt sed
. Das Tool behandelt es wörtlich, weil es nicht am Ende steht.