加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

使用sed提取mysql备份的一行部分

发布时间:2020-12-14 02:51:15 所属栏目:Linux 来源:网络整理
导读:我偶尔需要从 mysqlbackup中提取单个记录 为此,我首先从备份中提取我想要的单个表… sed -n -e’/ CREATE TABLE.* usertext /,/ CREATE TABLE / p’20120930_backup.sql table.sql 在table.sql中,记录使用扩展插入进行批处理(每个插入可能有100条记录,然后创
我偶尔需要从 mysqlbackup中提取单个记录

为此,我首先从备份中提取我想要的单个表…

sed -n -e’/ CREATE TABLE.* usertext /,/ CREATE TABLE / p’20120930_backup.sql> table.sql

在table.sql中,记录使用扩展插入进行批处理(每个插入可能有100条记录,然后创建一个以INSERT INTO开头的新行),所以它们看起来像……

INSERT INTO usertext VALUES(1,field2等),(2,

INSERT INTO usertext VALUES(101,(102,…

我试图从中提取记录239560,使用…

sed -n -e’/(239560.*/,/)/p’table.sql> record.sql

即..当它找到239560时开始流式传输,并在它到达结束时停止

但是这并不像我希望的那样工作,它只会导致输出完整的插入批次.

有人可以给我一些关于我哪里出错的指示吗?

我会更好地使用awk提取线段,并使用sed提取文件中的行吗?

解决方法

根据Iain的回答,我想出了这个sed技巧……
$sed  's/(INSERT[^(]*).*((239560,[^)]*)),.*/12/' sample.sql | tee 1-record.sql
INSERT INTO usertext VALUES (239560,2,3,4)
$


不使用sed的变化…
您可以提取仅与该一个数字匹配的某些行/插入的值.

$cat sample.sql
INSERT INTO usertext VALUES (101,field2 etc),(239560,4),(5,8,9)
INSERT INTO usertext VALUES (101,(1239560,9)
$egrep -o '((239560,[^)]+))' sample.sql        
(239560,4)
$

如果你使用-n开关和grep来匹配匹配行,那么插入的其余部分可以很容易地编写脚本,然后将所有内容剪切到第一个(

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读