好多编辑器都是正则表达式的替换的,比如emacs,其他没有尝试过,不过基本原理都应该是一样的。
起因:在工作中碰到database的schema移植问题,比如将mysql
转换成oracle的:
其中 ems 是变化的,其他都是固定不变。
emacs的解决办法是
M-x replace-regexp
回车输入:
drop table if exists \([a-z]*\);
再输入要替换的表达式:
drop table \1 cascade constraints;
DONE
简洁吧!
以下是官方文档的相关描述:
In replace-regexp, the newstring need not be constant: it can refer to all or part of what is matched by the regexp. `\&' in newstring stands for the entire match being replaced. `\d' in newstring, where d is a digit, stands for whatever matched the dth parenthesized grouping in regexp. To include a `\' in the text to replace with, you must enter `\\'. For example,
M-x replace-regexp RET c[ad]+r RET \&-safe RET
replaces (for example) `cadr' with `cadr-safe' and `cddr' with `cddr-safe'.
M-x replace-regexp RET \(c[ad]+r\)-safe RET \1 RET
可以看出,'\d'是对分组进行相应的替换
起因:在工作中碰到database的schema移植问题,比如将mysql
drop table if exists ems;
转换成oracle的:
drop table ems cascade constraints;
其中 ems 是变化的,其他都是固定不变。
emacs的解决办法是
M-x replace-regexp
回车输入:
drop table if exists \([a-z]*\);
再输入要替换的表达式:
drop table \1 cascade constraints;
DONE
简洁吧!
以下是官方文档的相关描述:
In replace-regexp, the newstring need not be constant: it can refer to all or part of what is matched by the regexp. `\&' in newstring stands for the entire match being replaced. `\d' in newstring, where d is a digit, stands for whatever matched the dth parenthesized grouping in regexp. To include a `\' in the text to replace with, you must enter `\\'. For example,
M-x replace-regexp RET c[ad]+r RET \&-safe RET
replaces (for example) `cadr' with `cadr-safe' and `cddr' with `cddr-safe'.
M-x replace-regexp RET \(c[ad]+r\)-safe RET \1 RET
可以看出,'\d'是对分组进行相应的替换