mysql - 使用 tac、grep 和 sed 从 MySQL 转储中提取表...反向

标签 mysql sed grep

我正在关注 this guide关于使用 grep 从 mysql 转储中提取表,这样我就不必恢复所有 50GB 的数据来查看一张表。拉表的两个主要命令是:

 grep -n "Table structure" [MySQL_dump_filename].sql

获取表定义的行号,然后

 sed -n '[starting_line_number],[ending_line_number] p' [MySQL_dump_filename].sql > [table_output_filename].sql

不过,我想以相反的顺序搜索 .sql 转储,因为我需要的是接近文件的末尾,并且需要相当长的时间来 grep 前 48GB 的​​数据。我在 OS X 上并安装了 tac(通过 brew 如前所述 here )。但是是否可以设置命令来完成此操作并在 sed 获取所需的行后退出?如果不是,我还不如从头开始 grep 而不是 tac,就等着吧。或在我看到另一个终端中填充的文件后按 ctrl-c。

运行示例:

$ tac dump.sql | grep -n "Table structure"
...
751:-- Table structure for table `answer`
779:-- Table structure for table `template`
806:-- Table structure for table `resource`
...

但是当然那些是倒过来的行号,所以如果你需要'模板'表你需要sed -n '752,779 p',但是从文件的末尾开始否则你会得到错误的行编号(sed 将从文件的开头开始计数)。

最佳答案

一些快速提示:

  • dd 可以帮助您跳过非常快 N 字节/ block /无论您确定前 N gb 没有用

  • 跳过后,无需 1) grep 查找行号然后 2) sed 跳过直到行号 n(读取剩余的两倍) : 你可以直接:

    awk '/beginningpattern/,/endpattern/{ 打印 $0 ; }' #warning: 语法不完整,最好阅读 awk 及其强大功能。你可以做各种整洁的事情。

关于mysql - 使用 tac、grep 和 sed 从 MySQL 转储中提取表...反向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14221302/

相关文章:

mysql - MySQL Workbench 6.0.9可以连接哪些版本的mysql?

regex - 使用 Sed 和正则表达式替换字符串

sed - 当一行与模式匹配时,我可以在 sed 中执行两个命令吗?

bash - 如何使用 sed 将 LF 替换为空格,而不是 CRLF?

linux - 如何使用 git 提取提交者的电子邮件?

bash - grep后查找字符串

php - 如果返回 0 行,则 MySQL 返回结果

javascript - 为什么 mysql-event 在 node.js 中不起作用?

mysql - SQL 中的互斥值

string - 批处理,比较两个文件并将差异写入另一个文件