我正在按照本指南使用 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 如此处所述)。但是是否可以设置命令来完成此操作并在 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将从文件的开头开始计算)。