我有一个包含许多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
然而,这删除了O
和B
,所以我最终得到了:
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