$> gunzip -c backup.sql.gz | grep -vP "^USE myDB;$" | mysql …
Die ganze Datei durchlaufen lassen, oder kann ich das trennen in gefilterten Text und ungefilterten?
Das verstehe ich noch nicht ganz.Habe über die Shell nunmal einfach
/bin/gunzip -c /my/path/myDump.sql.gz | grep -vP "^USE \`myDB\`;$" | /usr/bin/mysql -umyUser -p'myPass' -hlocalhost myDBname
durchlaufen lassen, das hat prima funktioniert.
Ich weiß aber nicht, ob Du das so gemeint hast, weil ich ja head -n hier gar nicht genutzt habe und meine db recht klein ist (was dann ggf. relevant ist).
Ich vermute viel eher, dass Du event. gemeint hattest, dass man den zu ersetzenden Teil der Datei eingrenzen kann und den Rest ungefiltert durchschickt?
Nein. Die Zeilen mit dem Pipe durch head
waren für den Test bestimmt, ob das grep
, respektive der Suchausdruck auch greift. Stell Dir das wie einen Mengenbegrenzer für Flüssigkeiten in einer Chemieanlage vor: Nach der festgelegten Menge ist der Hahn zu, es kommt gar nichts mehr ins Rohr (Deshalb das |
als Symbol für „pipe“), also auch nicht bei weiteren Reaktoren oder Filtern an.
Du solltest Dir die Resultat anschauen und dazu ist es kontraproduktiv, wenn es womöglich tausende Zeilen mit Inserts enthält. Nur dazu diente die Begrenzung auf die ersten 30 Zeilen der entpackten Datei.
Grundlagenwissen:
Beispiele:
head -n 2 file.txt
gibt die ersten 2 Zeilen der Datei 'file.txt' aus. Wird keine Input-Datei genannt, dann versuchthead
den Input aus<STRIN>
zu filtern.gunzip -c file.txt.gz | head -n2
gibt also die erste beiden Zeilen der in file.txt.gz gepackten Datei aus.
Aufgabe:
Denkhilfe: „Der Zweite ist der erste Verlierer.“
gunzip -c file.txt.gz | head -n 2 | tail -n1
gibt nur die zweite Zeile der in file.txt.gz gepackten Datei aus. Versuche herauszubekommen, warum das so ist. Lies die manpages, teste die Befehle schrittweise. Und denke an die Denkhilfe.