在我的bash脚本中,我试图用csv文件中的两个撇号('')替换所有撇号('),以便将其提交到postgres数据库。如您所知,postgres查询中的所有单引号都需要使用撇号进行转义。
我不能在查询中使用双引号,因为它们中也有双引号。因此除了使用sed进行毯子替换之外,没有简单的方法。我已经尝试了以下方法,但无济于事:
sed "s/\'/\'\'/g" test.txt #Does not work
sed "s/'/''/g" test.txt #Does not work
sed s/\'/"\'\'"/g test.txt #Does not work
有没有人对如何让它发挥作用有想法?
答案 0 :(得分:0)
这对你有用:
sed "s/'/''/g" <<< "test'test"
由于您使用双引号括起命令,因此撇号不需要转义。
顺便说一下,如果你想用单引号括起命令本身,你可以在命令中使用撇号\047
的八进制表示:
sed 's#\047#\047\x47#g' <<< "test'test"
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed 's/'\''/&&/g' file
第二个'
结束了替换命令第一部分的引用。第三个'
位于shell中,因此引用\'
。然后引用替换命令的其余部分。使用&&
作为substitutin命令的LHS中整个匹配的简写,加倍。
N.B。最好使用单引号引用sed命令,因为它消除了shell意外解释命令中字符的可能性。
答案 2 :(得分:0)
由于您表示:
我不能使用双引号
如果你的shell允许$'...'
,sh
,ksh
和其他人这样做,你可能希望考虑使用bash
:
sed $'s/\'/\'\'/g'