使用sed替换SQL的Regex



我有一个包含许多SQL语句的文件,需要使用SED为SQL语句中的单引号添加转义符。考虑以下内容:

INSERT INTO MYTABLE VALUES (1,'some text','Drink at O'Briens');

在上文中,我们需要转义O'Briens中的单引号。使用regex,我可以使用[a-zA-Z ]'[a-zA-Z ]找到字符串。

因此,这将找到感兴趣的3个字符,然而,如果我执行以下sed命令:

sed -i "s/[a-zA-Z ]'[a-zA-Z ]/''/g" file.sql

然而,这删除了OB,所以我最终得到了:

INSERT INTO MYTABLE VALUES (1,'some text','Drink at ''riens');

如何隔离/引用O和B,使字符串变为:

INSERT INTO MYTABLE VALUES (1,'some text','Drink at O''Briens');

使用捕获组将部分输入复制到结果中。

sed -r -i "s/([a-zA-Z ])'([a-zA-Z ])/1''2/g" file.sql

您可以在awk中执行此操作。简单的解释是,对行的最后一个字段执行替换,其中用'的两个实例替换',然后打印该行。

awk '{sub(/47/,"&&",$NF)} 1' Input_file

上面的代码将只打印输出中的行,如果您想执行就地保存,请尝试以下操作。

awk '{sub(/47/,"&&",$NF)} 1' Input_file > temp && mv temp Input_file

最新更新