使用Sed向MySQLdump添加引号
我试图使用sed在mysql转储中添加十进制值周围的引号。行的格式如下:使用Sed向MySQLdump添加引号,mysql,regex,sed,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 对于我应该使用
INSERT INTO .... 'LastName', 1356.183);
我试图将最后一个值(在本例中为1356.183)封装在引号中,这将导致以下结果:
INSERT INTO .... 'LastName', '1356.183');
到目前为止,我尝试了以下sed命令的变体,但没有成功:
sed -i '.bak' "s/, \(\d+.\d+\))/, '\1')/g" test.txt
对于我应该使用的正则表达式有什么建议吗?谢谢大家! 很少有工具会将
\d
识别为代表一个数字,+
是一个ERE元字符,而不是sed默认支持的BRE。只需使用[0-9]
而不是\d
,并转义+
即可将其作为POSIX sed中的ERE元字符激活:
$ sed 's/[0-9]\+\.[0-9]\+/'\''&'\''/' file
INSERT INTO .... 'LastName', '1356.183');
我还转义了
以停用它的元字符属性,并修复了您的引用(为了避免意外后果,切勿在任何脚本周围使用双引号-始终使用单引号,并仅在需要外壳能够扩展的任何部分周围终止它们,例如,您应该执行sed's/''$var'/whatever/'
,而不是sed“s/$var/whatever/”
).尝试使用sed-i.bak''s/\(\d+。\d+\)/'\1'/g”test.txt
为什么需要引用数字?插入无论是否使用引号都可以正常工作。