【问题标题】:list tables from mysql dump file with sed使用 sed 从 mysql 转储文件中列出表
【发布时间】:2020-10-06 00:14:50
【问题描述】:

我有需要从 mysql 转储文件中提取表列表的情况。我用 sed 试过了

 sed  's/DROP TABLE.*?`(.*?)`/\1/' baza.sql > 1.txt

但出现此错误

sed: -e expression #1, char 26: invalid reference \1 on `s' command's RHS

我在我的正则表达式中遗漏了什么?

【问题讨论】:

  • 没有错误,但在 1.txt 中有完整的转储内容

标签: regex linux sed


【解决方案1】:

由于您使用的是 Linux,并且您需要在 DROP TABLE 之后的第一个反引号内获取所有字符串,我建议使用带有 PCRE 正则表达式的 grep

grep -oP 'DROP TABLE.*?`\K[^`]+' baza.sql > 1.txt

请参阅PCRE regex demo

详情

  • DROP TABLE - 一些文字文本
  • .*? - 除换行符之外的任何零个或多个字符都尽可能少
  • ` - 一个反引号
  • \K - 匹配重置运算符丢弃所有匹配的文本
  • [^`]+ - 一个或多个除反引号以外的字符

如果你每行匹配一次,你仍然可以选择sed

sed -nE 's/DROP TABLE.*`([^`]*)`.*/\1/p' baza.sql > 1.txt

这里,-n 禁止默认行输出,-E 启用 POSIX ERE(其中(...) 定义捕获组,而不是\(...\)),然后p 标志只打印替换的结果。

【讨论】:

    猜你喜欢
    • 2011-11-17
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    相关资源
    最近更新 更多