使用Sed向MySQLdump添加引号

时间:2016-07-26 14:58:42

标签: mysql regex sed

我正在尝试使用sed在mysql转储中的十进制值周围添加引号。这些行遵循以下格式:

INSERT INTO .... 'LastName', 1356.183);

我试图用引号封装最后一个值(在本例中为1356.183),这将产生以下结果:

INSERT INTO .... 'LastName', '1356.183');

到目前为止,我已尝试使用以下sed命令的变体而没有运气:

sed -i '.bak' "s/, \(\d+.\d+\))/, '\1')/g" test.txt

我应该使用正则表达式的任何建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

很少有工具会将\d识别为数字,而+是ERE元字符,而不是默认情况下sed支持的BRE。只需使用[0-9]代替\d并转义+以将其激活为POSIX sed中的ERE元字符:

$ sed 's/[0-9]\+\.[0-9]\+/'\''&'\''/' file
INSERT INTO .... 'LastName', '1356.183');

我还逃脱了.以停用它的元字符属性,并修复了您的引用(以避免绊倒意外后果,从不在任何脚本周围使用双引号 - 始终使用单引号和在你需要shell扩展的任何部分周围终止它们 ,例如你应该sed 's/'"$var"'/whatever/',而不是sed "s/$var/whatever/"。)