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