用单引号bash,sed

时间:2017-03-15 01:38:48

标签: bash macos sed tr

我正在尝试准备一些数据以转储到psql数据库中。

我遇到的问题是我的数据包含转义双引号。我需要将\"替换为'

所以我需要改变: \"show the cash pool history\" 成: 'show the cash pool history'

当我尝试将JSON解析为postgres时,它会在到达“\。<。

时窒息

我只是尝试在bash中使用一个工具(比如sed或tr)来删除\"并用单引号替换。

我已经在这几个小时了。没有运气,请帮助!!

3 个答案:

答案 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)

您可以使用awktr替代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'