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

Ale*_*lex 4 bash grep sed mysqldump

我有一个巨大的mysqldump输出,并希望排除特定表的插入.

该文件如下所示:

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

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


--
-- Table structure for table `next_table`
--
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lex 13

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

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


Bir*_*rei 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
Run Code Online (Sandbox Code Playgroud)

运行命令:

sed -e '
    /-- Dumping data for table `big_table`/,/-- Table structure for table/ { 
        /^--/! s/^/--/ 
    }
' infile
Run Code Online (Sandbox Code Playgroud)

输出如下:

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
Run Code Online (Sandbox Code Playgroud)

  • @Alex:是的.用'd`替换`s/^/ - /`删除不以`--`开头的范围之间的那些行. (3认同)