我正试图使用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
对我应该使用的regex有什么建议吗?谢谢您!
最佳答案
很少有工具会将\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/"
)。