sed: Ersetzen Sie einen oder mehrere Gruppenwerte in Zeilen, die übereinstimmen

sed: Ersetzen Sie einen oder mehrere Gruppenwerte in Zeilen, die übereinstimmen

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 configoder nicht varin 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.

verwandte Informationen