从mysqldump输出中删除特定表的插入数据(sed?)

时间:2012-07-17 12:18:37

标签: bash sed grep mysqldump

我有一个巨大的mysqldump输出,想要排除特定表的插入。

该文件如下所示:

--
-- Dumping data for table `big_table`
--

INSERT INTO `big_table` ...
INSERT INTO `big_table` ...


--
-- Table structure for table `next_table`
--

如何删除介于“为表big_table转储数据”和下一个“表结构表”之间的插入文件太大而无法放入文本编辑器中。

3 个答案:

答案 0 :(得分:12)

我忽略了当然所有插入都以表名开头的事实。所以我可以简单地使用

grep -v "INSERT INTO \`big_table\`" dump.sql > dump_stripped.sql

答案 1 :(得分:6)

使用sed的一种解决方案。它会搜索文字-- Dumping data for table 'big_table'-- Table structure for table之间的所有行。并评论那些不以--开头的行。

假设内容为infile

1
2
3
4
--
-- Dumping data for table `big_table`
--

INSERT INTO `big_table` ...
INSERT INTO `big_table` ...


--
-- Table structure for table `next_table`
--
1
2
3
4
5
6

运行命令:

sed -e '
    /-- Dumping data for table `big_table`/,/-- Table structure for table/ { 
        /^--/! s/^/--/ 
    }
' infile

使用以下输出:

1
2
3
4
--
-- Dumping data for table `big_table`
--
--
--INSERT INTO `big_table` ...
--INSERT INTO `big_table` ...
--
--
--
-- Table structure for table `next_table`
--
1
2
3
4
5
6

答案 2 :(得分:0)

解决方法如何:

  1. 备份您不想更新的表(重命名然后重新创建一个空版本)
  2. 运行转储
  3. 恢复您的表格并覆盖由转储提供的
  4. 我希望这会有所帮助。