Ich versuche, eine Konfigurationsdatei mit einem Skript zu bearbeiten, das auch andere Operationen ausführt.Suchen und Ersetzen mehrerer Textzeilen über die Befehlszeile
Das Skript muss bestimmte aufeinanderfolgende Textzeilen finden und diese entfernen. An Ort und Stelle muss eine neue Konfiguration eingefügt werden, die in der gleichen Zeile beginnt wie die alte Konfiguration. Sowohl in der alten als auch in der neuen Konfiguration ist die Verwendung von Leerzeichen wichtig.
in configfile.php dieser Textblock:
'session' =>
array (
'save' => 'files',
),
muss gefunden und mit Inhalt ich an der gleichen Stelle in replacement.txt setzte ersetzt werden.
Basierend auf Antworten auf ähnliche Fragen, eines der Dinge, habe ich versucht, ist dies:
cat replacement.txt <(sed -i '1,/ 'session' => \n array (\n 'save' => 'files',\n ),/d' configfile.php) > configfile.php
Dies in einer leeren Datei führt.
cat replacement.txt <(sed -i '1,/ 'session' => \n array (\n 'save' => 'files',\n ),/d' configfile.php) > newfile.php
Dies macht das gleiche wie Katze replacement.txt> newfile.php ist und ich möchte eine Datei bearbeiten, keine neue Datei erstellen.
Weiß jemand, was mit meiner Syntax falsch ist und wie ich es beheben kann?
Ich habe diese Frage vor here gestellt, aber ich habe mich nicht vollständig verstanden, was ich wollte, also wurde es ein bisschen zu aufwändig und verwirrend. Ich benutze Debian Linux.
bearbeiten basierend auf Kommentar:
Die replacement.txt sieht wie folgt aus:
'session' =>
array (
'save' => 'redis',
'redis' =>
array (
'host' => '127.0.0.1',
'other_variable' => 'other_setting',
)
)
),
Es ist bereits die Art und Weise eingekerbt es sein sollte und wie eingefügt werden. Die Verwendung von awk oder sed ist in Ordnung.
Danke für Ihre Hilfe. Ich habe die Frage aktualisiert. – phol
Momentan fehlen nur noch die concise-Eingabedatei configfile.php, die die Zeichenfolge anzeigt, die im Kontext zwischen anderen Zeilen ersetzt werden soll, sowie die gewünschte Ausgabe, die dieselbe Datei nach dem Ersetzen anzeigt. –