我正在尝试准备一些数据以转储到psql数据库中。
我遇到的问题是我的数据包含转义双引号。我需要将\"
替换为'
。
所以我需要改变:
\"show the cash pool history\"
成:
'show the cash pool history'
当我尝试将JSON解析为postgres时,它会在到达“\。<。
时窒息我只是尝试在bash中使用一个工具(比如sed或tr)来删除\"
并用单引号替换。
我已经在这几个小时了。没有运气,请帮助!!
答案 0 :(得分:3)
sed
能够处理此问题,您只需要小心引用。我在此假设您的文件存储在b.txt
中,但cat b.txt
可以替换为任何命令。
$ cat b.txt | sed -e 's/\\"/'\''/g'
表达式是连接s/\\"/
,'
和/g
的三个字符串。中间的一个表示为\'
,另外两个是单引号。
$ cat b.txt | sed -e "s/\\\\\"/'/g"
也会起作用,但可读性稍差。
$ cat b.txt
\"show the cash pool history\"
,输出
'show the cash pool history'
答案 1 :(得分:1)
另一种选择(GNU sed
)
sed 's/\\"/\x27/g' text
答案 2 :(得分:0)
您可以使用awk
或tr
替代sed
:
echo '\"show the cash pool history\"' # \"show the cash pool history\"
<强> AWK 强>
awk '{ gsub(/\\"/, "\047"); print }'
在棘手的情况下使用八进制值会有所帮助(047是单引号)。
tr
tr -s '\\"' \'
这使用一种简单的方法,类似于awk
示例,使用-s
选项( squeeze ) - 它替换了列出的重复字符序列的每个实例。使用第2组中指定的字符的单个实例设置1。
<强>结果强>:
'show the cash pool history'