我有需要从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

我在正则表达式中错过了什么?

最佳答案

由于您使用的是Linux,因此需要在DROP TABLE之后的第一个反引号中获取所有字符串,因此建议您将grep与PCRE regex一起使用

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标志仅显示替换结果。

    关于regex - 列出带有sed的mysql转储文件中的表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62407624/

    10-11 22:58
    查看更多