我正在尝试使用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
我应该使用正则表达式的任何建议吗?谢谢!
答案 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/"
。)