获取管道操作的前 N ​​行输出

获取管道操作的前 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 文件。

任何想法?

谢谢

答案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

相关内容