首先使用如下命令,获取行号。
sed -n -e '/CREATE TABLE/=' -e '/CREATE TABLE/p' test1.sql
= 表示打印匹配行的行号
p 表示打印匹配行
得到如下格式的输出
23 CREATE TABLE `CeanaterAd` ( ....... 此处省略n行 1890 CREATE TABLE `UserFsdfodfllow` ( 2369 CREATE TABLE `UserMeddssageReply` ( 2529 CREATE TABLE `UserWeasdflthLog` ( |
现在要获取 UserFsdfodfllow 表的数据。
直接
sed -n '1890,2368p' test1.sql > /tmp/test2.sql
将1890行到2368行的数据输出并输出到/tmp/test2.sql文件中。
再将最后7行剪切到文件开头,就可以完成利用sed从库备份sql文件中只抽取一个表文件的数据。
其实还有种思路来做更简单( 但这样行不通)。
那就是
sed -n '/CREATE TABLE `UserFsdfodfllow`/,/CREATE TABLE `UserMeddssageReply`/p' test1.sql > /tmp/test_sed.log
因为在命令行中 ` 的优先级大于sed命令本身。
` ` 中的内容会先于sed命令被识别,从而把``中的内容当作一条命令。
不管该命令存在或不存在,都是错误的,不能这么执行。
sed -n '/START/,/END/p' test1.sql > /tmp/test_sed.log
表示将START END之间的所有内容输送到另一个文件中。
评论