我偶尔需要从 mysqlbackup中提取单个记录
为此,我首先从备份中提取我想要的单个表...
sed -n -e '/CREATE TABLE.*usertext/,/CREATE TABLE/p' 20120930_backup.sql > table.sql
在 table.sql 中,记录使用扩展插入进行批处理(在创建以 INSERT INTO 开头的新行之前,每个插入可能有 100 条记录),所以它们看起来像......
INSERT INTO usertext VALUES (1, field2 etc), (2, field2 etc),
INSERT INTO usertext VALUES (101, field2 etc), (102, field2 etc), ...
我试图从中提取记录 239560,使用...
sed -n -e '/(239560.*/,/)/p' table.sql > record.sql
即.. 在找到 239560 时开始流式传输,并在到达右括号时停止
但这并没有像我希望的那样工作,它只会导致输出完整的插入批次。
请有人能给我一些关于我哪里出错的指示吗?
我会更好地使用 awk 提取行段,并使用 sed 提取文件中的行吗?
尝试这样的事情,它可能会根据您的示例进行调整,但希望能让您走上正确的轨道
给定这样的输入文件
这样做是将您的数据分成 3 个部分,使用 (...) 记住重要部分并将其替换为整行。
.*
你想要的文字之前的一切\((102,[^)]*)\)
你有趣的文字,.*
其他一切根据伊恩的回答,我想出了这个 sed 技巧......
-- 不使用 sed 的变化...您可以提取仅匹配那个数字的某些行/插入的值。
如果您将 -n 开关与 grep 一起使用以捕获匹配行,然后将所有内容剪切到第一个(