使用sed提取mysql备份的一行部分
我偶尔需要从
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) $ – $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来匹配匹配行,那么插入的其余部分可以很容易地编写脚本,然后将所有内容剪切到第一个( (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |