Linux-Befehl zum Ersetzen der Zeichenfolge in der LARGE-Datei durch eine andere Zeichenfolge

8

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"

ersetzt wird

Wie kann dies über die Befehlszeile erfolgen?

    
coderama 07.08.2009, 10:52
quelle

7 Antworten

29

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%     
Vinko Vrsalovic 07.08.2009, 10:53
quelle
12

Nur der Vollständigkeit halber. Ersatz vor Ort mit perl .

%Vor%

Es sind auch keine Backslash-Escapes erforderlich. ;)

    
ire_and_curses 07.08.2009 11:04
quelle
4

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.

    
Paul Dixon 07.08.2009 10:54
quelle
3

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.

    
Meredith L. Patterson 07.08.2009 11:14
quelle
1

Der Befehl sed kann das tun. Anstatt die Schrägstriche zu umgehen, können Sie ein anderes Trennzeichen (_ in diesem Fall) auswählen:

%Vor%     
stefanw 07.08.2009 10:53
quelle
1
%Vor%

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

    
Logan 07.08.2009 15:30
quelle
1

gawk

%Vor%     
ghostdog74 07.08.2009 16:11
quelle

Tags und Links