
我正在使用管道命令將大型生產資料庫從一台主機遷移到另一台主機,使用以下命令:
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 檔案。
任何想法?
謝謝
答案1
和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>
(儘管請注意,asbash
不會等待該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