2017-12-29 18 views
1

Ich habe 2 Wordpress-Dateien (php) von einem Plugin, dass, wenn sie aktualisieren, würde Ich mag eine Auto-Fix für einige Linien zu erhalten, die für mich am besten trifft.Suchen und Ersetzen vollständige Inhalt Linien von Shell-Skript

ich meine Website in CentOS läuft und ich habe die volle Kontrolle über die Maschine, so kann ich für automatisierte Aufgabe Shell-Skripten über Cron ausführen.

Wie kann ich suchen und ersetzen (nicht durch Zeilennummern, da es ein Plugin von Drittanbietern ist und der Besitzer Dinge von Ort ändern kann da es kein Bug ist, sondern eine Verbesserung für meine Website). Ich werde die Mods kurz machen, da es eine Menge Mods für diese 2 Dateien geben wird und ich brauche nur eine Idee, wie das geht.

Klasse-recovery.php

Suchen nach: function dump_files($warning = false) { und ersetzen mit: function dump_files($warning = false) { $cancel_order;

Klasse-prompt.php

Suchen nach: private $replace_only; und ersetzen mit: private $replace_only = true;

Wie kann Ich mache das fertig? Ich war Surfen und Stackoverflow einige Benutzer vorschlagen sed für die Suche zu verwenden und ersetzen, aber da dies nicht nur Text, sondern php Dateien, würde dies sed gilt? Oder gibt es dafür eine bessere Lösung?

--edit Wie könnte diese Arbeit für mehrzeilige Suchen und Ersetzen SED mit? Ich habe die traditionelle Art und Weise verwendet, aber es ersetzt nicht, wenn es 2 Zeilen (und höher) eingerückt ist. Beispiel:

if (empty($donot_dump)) { 
       return false; 

zu so etwas wie:

if (empty($donot_dump)) { 
       return true; 

Antwort

1

Ja, natürlich-sed kann für diese Angelegenheit zu einem beliebigen Text-Dateiformate angewendet werden. Alles, was Sie tun müssen, ist die Syntax s/orignial/replace Syntax für Suchen und Ersetzen. Und wenn Sie -i Syntax verwenden, wird es den Inhalt der Datei direkt ersetzen. Also alles, was Sie brauchen, ist

sed -i.bak "s/function dump_files(\$warning = false) {/function dump_files(\$warning = false) { \$cancel_order;/g" class-recovery.php 

und für die zweite Datei

sed -i.bak "s/private \$replace_only;/private \$replace_only = true;/g" class-prompt.php 

Normalerweise benutzen wir ' (einfache Anführungszeichen) um Argumente von sed, aber da haben wir Räume um die Quellzeichenfolge müssen wir Bewahre es auf, ziehe die Saite doppelt an. Auch mit doppelten Anführungszeichen Variablen vorhergehenden einen $ eine besondere Bedeutung haben, das heißt, die Schale behandelt sie als Variablen und versucht, es zu erweitern. Wir müssen sie entkommen mit einem \ wissen zu lassen, es nicht eine Variable ist, sondern ein wörtliches Wort.

Die -i.bak zu ermöglichen, ist eine Kopie der Datei unter der Erweiterung .bak und ersetzen Sie das Original zu speichern, so dass, wenn sed nicht Ihren Dateiinhalt ersetzen soll, können Sie es jederzeit mit dieser Datei wiederherstellen.

Entfernen Sie die .bak und behalten Sie einfach als -i, wenn Sie nicht möchten, dass die Sicherungsdateien gespeichert werden.


Wenn Ihr Ersatz-String ein Zeichen für die Zeilen \\n und übliche Räume muss verwenden, um die Formatierung zu haben, je nach Bedarf. Für z.B.

sed "s/function dump_files(\$warning = false) {/function dump_files(\$warning = false)\\n { \$cancel_order;/g" file 

erzeugt eine Ausgabe wie unten

function dump_files($warning = false) 
{ $cancel_order; 
+0

Great! Danke, Kumpel :) – Diego