Ich habe eine riesige SQL-Datei, die auf dem Server ausgeführt wird. Der Speicherabzug stammt von meinem Computer und es gibt einige Einstellungen, die sich auf meinen Rechner beziehen. Also möchte ich, dass jedes Vorkommen von "c://temp"
durch "//home//some//blah"
Wie kann dies über die Befehlszeile erfolgen?
sed ist eine gute Wahl für große Dateien.
%Vor%Es ist eine gute Wahl, weil die ganze Datei nicht sofort gelesen wird, um sie zu ändern. Zitieren des Handbuchs:
Ein Stream-Editor wird verwendet grundlegende Texttransformationen an einer Eingabe stream (eine Datei oder eine Eingabe von einem Pipeline). Während in gewisser Hinsicht ähnlich zu einem Editor, der scripted erlaubt edits (wie ed), sed arbeitet nach machen nur einen Durchlauf über die Eingabe (s), und ist folglich mehr effizient. Aber es ist die Fähigkeit von sed Filtertext in einer Pipeline, die unterscheidet es besonders von andere Arten von Editoren.
Der relevante manuelle Abschnitt ist hier . Eine kleine Erklärung folgt
-i.bak ermöglicht die Bearbeitung vor Ort und hinterlässt eine Sicherungskopie mit der Erweiterung .bak
s% foo% bar% verwendet s, den Ersetzungsbefehl, der ersetzt die Übereinstimmungen der ersten Zeichenfolge zwischen dem% -Zeichen, 'foo', für die Sekunde Zeichenfolge, 'bar'. Es wird normalerweise als s // geschrieben aber weil deine Saiten viel haben von Schrägstrichen ist es bequemer ändere sie für etwas anderes, also du vermeiden Sie, ihnen zu entkommen.
Beispiel
%Vor% Nur der Vollständigkeit halber. Ersatz vor Ort mit perl
.
Es sind auch keine Backslash-Escapes erforderlich. ;)
Versuchen Sie sed ? Etwas wie:
%Vor%Das Verschwinden all dieser Schrägstriche macht dies jedoch schrecklich. Hier ist ein einfacheres Beispiel, das foo in bar umwandelt.
%Vor%Wie andere bemerkt haben, können Sie Ihr eigenes Trennzeichen wählen, das das schiefe Zahnstocher-Syndrom in diesem Fall verhindert:
%Vor%Das Besondere an sed ist, dass es auf einem stream läuft und nicht auf einmal auf einer Datei, so dass Sie große Dateien mit nur wenig Speicher verarbeiten können.
Es gibt auch ein nicht standardmäßiges UNIX-Dienstprogramm, rpl , das genau dasselbe tut wie die sed
-Beispiele machen; Ich bin mir jedoch nicht sicher, ob rpl
im Stream funktioniert, also ist sed
möglicherweise die bessere Option.
Die Option -p behandelt dieses Skript als eine Schleife. Es liest die angegebene Datei zeilenweise, wobei die reguläre Suche ausgeführt und ersetzt wird.
-i Dieses Flag sollte in Verbindung mit dem Flag -p verwendet werden. Dies befiehlt Perl, die Datei an Ort und Stelle zu bearbeiten.
-e bedeutet nur, diesen Perl-Code auszuführen.
Viel Glück
Tags und Links command-line perl linux sed awk