
Ich verwende einen Pipe-Befehl, um eine große Produktionsdatenbank mit diesem Befehl von einem Host auf einen anderen zu migrieren:
mysqldump <someparams> | pv | mysql <someparams>
Und ich muss Zeile 23 (oder sagen wir die ersten X Zeilen) (als Datei gespeichert oder einfach in der Bash-Ausgabe) aus dem SQL extrahieren, das von einem Server zum anderen übertragen wird.
Was ich versucht habe:
Verketten Sie in der Ausgabe
less
, um zumindest das Scrollen der Ausgabe zu sehen, aber kein Glückmysqldump <someparams> | pv | mysql <someparams> | less
Habe darüber gelesen
sed
, aber es ist für mich nicht nützlichVerwenden von head zum Schreiben in eine Datei, diese ist jedoch leer
mysqldump <someparams> | pv | mysql <someparams> | head -n 25 > somefile.txt
Die einzige Anforderung, die ich habe, ist, dass ich diese SQL-Datei nicht speichern kann.
Irgendeine Idee?
Danke
Antwort1
Mitzsh
mysqldump <someparams> |
pv > >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
Mit bash
oder zsh
):
mysqldump <someparams> |
pv |
tee >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
(Beachten Sie jedoch, dass as bash
nicht auf diesen sed
Vorgang wartet und daher nicht garantiert werden kann, dass saved-lines-22-to-24.txt
er abgeschlossen ist, wenn Sie den nächsten Befehl im Skript ausführen).
Oder Sie müssen sed
schreiben:
mysqldump <someparams> |
pv |
sed '22,24 w saved-lines-22-to-24.txt' |
mysql <someparams>
Um es als Ausgabe zu erhalten, mit zsh
:
{mysqldump <someparams> |
pv > >(sed '22,24!d' >&3) |
mysql <someparams>} 3>&1
oder bash
/ zsh
:
{ mysqldump <someparams> |
pv |
tee >(sed '22,24!d' >&3)
mysql <someparams>
} 3>&1