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
一种解决方案使用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)