不包括mysql.log中的子模式的正则表达式
我正在寻找从本地mysql.log文件恢复要对生产服务器执行的更改,我已经通过以下方式获得了更改:不包括mysql.log中的子模式的正则表达式,mysql,regex,Mysql,Regex,我正在寻找从本地mysql.log文件恢复要对生产服务器执行的更改,我已经通过以下方式获得了更改: ^.*(ALTER TABLE).*(ADD|DROP|CHANGE|^AUTO_INCREMENT).*$ 。。我还将捕获createtable语句,排除showcreatetable和createtable(如果不存在)。因此,我首先试图避免节目,但我并没有用我头脑中更直观的方式成功: ^.*(^SHOW)*(CREATE TABLE).*$ ^.*(^SHOW CREATE TABLE|
^.*(ALTER TABLE).*(ADD|DROP|CHANGE|^AUTO_INCREMENT).*$
。。我还将捕获createtable
语句,排除showcreatetable
和createtable(如果不存在)
。因此,我首先试图避免节目
,但我并没有用我头脑中更直观的方式成功:
^.*(^SHOW)*(CREATE TABLE).*$
^.*(^SHOW CREATE TABLE|CREATE TABLE).*$
感谢您的帮助
Carmine Iaciofano看起来很消极,正面和反面都可以用来解决你的问题。在这种情况下,下面的正则表达式应该起作用
(?<!SHOW )(CREATE TABLE)(?! IF)
(?
在这种情况下,它会查找“createtable”的任何实例,这些实例前面没有“SHOW”或后面没有“IF”。请注意组中的空格
然后您可以使用
^.*(?<!SHOW )(CREATE TABLE)(?! IF).*
^.*?
与整条线路相匹配
你可以阅读look aheads和look behinds。如果我假设egrep?支持消极查找断言,请查看消极查找断言。太好了!它很有效。我在很多方面尝试过消极查找,但我错过了“SHOW”后的空白。我会关注你所附的链接并进行研究。谢谢!