我正在使用管道命令将大型生产数据库从一台主机迁移到另一台主机,使用以下命令:
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