Command-Line
從管道操作中獲取前 N 行輸出
我正在使用管道命令將大型生產數據庫從一台主機遷移到另一台主機:
mysqldump <someparams> | pv | mysql <someparams>
而且我需要從從一台伺服器傳遞到另一台伺服器的 SQL 中提取第 23 行(或者說是前 X 行)(保存為文件或簡單地保存在 bash 輸出中)。
我試過的:
- 在輸出中連接
less
,至少可以看到輸出滾動,但沒有運氣
mysqldump <someparams> | pv | mysql <someparams> | less
- 閱讀有關
sed
,但這對我沒有用- 使用 head 寫入文件,但它是空的
mysqldump <someparams> | pv | mysql <someparams> | head -n 25 > somefile.txt
我唯一的要求是我不能保存這個 .sql 文件。
任何的想法?
謝謝
和
zsh
mysqldump <someparams> | pv > >(sed '22,24!d' > saved-lines-22-to-24.txt) | mysql <someparams>
使用
bash
(或zsh
):mysqldump <someparams> | pv | tee >(sed '22,24!d' > saved-lines-22-to-24.txt) | mysql <someparams>
(雖然請注意 as
bash
不會等待該sed
過程,但不能保證saved-lines-22-to-24.txt
在您執行腳本中的下一個命令時會完成)。或者你可能不得不
sed
寫作:mysqldump <someparams> | pv | sed '22,24 w saved-lines-22-to-24.txt' | mysql <someparams>
要將其作為輸出,請使用
zsh
:{mysqldump <someparams> | pv > >(sed '22,24!d' >&3) | mysql <someparams>} 3>&1
或
bash
/zsh
:{ mysqldump <someparams> | pv | tee >(sed '22,24!d' >&3) mysql <someparams> } 3>&1