Ich muss die ersten 42 Zeilen eines 2-GB-SQL-Dumps entfernen.
Ich weiß, dass ich die ersten Zeilen anzeigen kann mit:
head -n 44 dump.sql
Aber gibt es trotzdem die Möglichkeit, sie zu bearbeiten oder zu entfernen?
Ich muss die ersten 42 Zeilen eines 2-GB-SQL-Dumps entfernen.
Ich weiß, dass ich die ersten Zeilen anzeigen kann mit:
head -n 44 dump.sql
Aber gibt es trotzdem die Möglichkeit, sie zu bearbeiten oder zu entfernen?
Antworten:
Wenn Sie nur die Zeilen ab dem 43. anzeigen möchten, können Sie verwenden
tail -n +43 dump.sql
Das +
Zeichen ist wichtig - ohne es tail
werden stattdessen die letzten 43 Zeilen gedruckt . Alternativ mit 'sed'
sed 1,42d dump.sql
Wenn Sie die ersten 42 Zeilen der Originaldatei wirklich löschen möchten, können Sie die Änderung mit der -i
Option vornehmen
sed -i 1,42d dump.sql
sed -i 1,50000000d 17GigFile
Erstellt eine temporäre Datei sedXYZ
, die viel mehr Gigabyte verbraucht. Gibt es einen Ansatz ohne temporäre Dateien?
tail -n +43
und head -n 44
wie in der Frage erwähnt?
Dies scheint am einfachsten zu sein:
sed '1,42d' test.sql > test2.sql
Entfernen Sie die Zeilen 1-42 aus test.sql und speichern Sie sie als test2.sql
Sie können Vim im Ex-Modus verwenden:
ex -s -c '1d42|x' dump.sql
1
in die erste Zeile gehen
42
Wähle 42 Zeilen aus
d
löschen
x
speichern und schließen
Entschuldigung, ich kann Ihnen momentan keinen aktuellen Code geben. Versuchen Sie jedoch, etwas in der Richtung von zu betrachten
tail -n arcv(`wc -l`) -44
Was dies tun sollte (einmal richtig formatiert), ist die Anzahl der Zeilen in der Datei zu zählen (wc -l), 44 davon zu subtrahieren (-44) und dann alles beginnend mit der 45. Zeile in der Datei auszudrucken.
Hoffe das hilft und viel Glück.
wc -l
auf der Datei, können Sie sie zweimal verarbeiten, während sed
oder tail
erst einmal verarbeiten.
Aufgrund von sed
Unstimmigkeiten zwischen Linux und Mac habe ich beschlossen, das tail -n +43 dump.sql > dump.sql
Format zu verwenden .
tail
. Ich habe viele Male etwas Neues gefunden, um aus Ihren Antworten zu lernen. Vielen Dank.