我正在寻找从我的本地mysql.log文件中恢复对生产服务器执行的更改,并且我已经使用以下命令进行了更改:
^.*(ALTER TABLE).*(ADD|DROP|CHANGE|^AUTO_INCREMENT).*$
..我还会抓住CREATE TABLE
语句,不包括SHOW CREATE TABLE
和CREATE TABLE IF NOT EXISTS
。所以我试图首先避免使用SHOW
,但我并没有成功地使用更直观的方式:
^.*(^SHOW)*(CREATE TABLE).*$
^.*(^SHOW CREATE TABLE|CREATE TABLE).*$
感谢任何帮助,
Carmine Iaciofano
答案 0 :(得分:2)
似乎是负面的前瞻和后方可以用来解决你的问题。在这种情况下,以下正则表达式应该可以完成。
(?<!SHOW )(CREATE TABLE)(?! IF)
在这种情况下,它会找到“CREATE TABLE”的任何实例,其前面没有“SHOW”或后面跟着“IF”。注意组中的空格。
然后您可以使用
^.*(?<!SHOW )(CREATE TABLE)(?! IF).*
匹配整条线。
您可以阅读前瞻并了解here。