我尝试在bash脚本中使用sed,以便将'
替换为''
我必须这样做是因为Oracle DB,但我找不到合适的语法。
到目前为止,我已经尝试过:
sed -e 's/(')/('')/g' List_employees_a.csv > List_employees.csv
sed -e 's/'/''/g' List_employees_a.csv > List_employees.csv
sed -e 's/'/\'\'/g' List_employees_a.csv > List_employees.csv
sed -e 's/\'/\''/g' List_employees_a.csv > List_employees.csv
答案 0 :(得分:4)
这个怎么样?
sed "s/'/''/g"
$ cat file
hello'my name is
quote' and double quote" blabla
$ sed "s/'/''/g" file
hello''my name is
quote'' and double quote" blabla
答案 1 :(得分:4)
这个sed应该有效:
sed 's/'\''/'\'''\''/g'
或者使用双引号作为分隔符:
sed "s/'/''/g"
或更详细:
sq="'"
dq="''"
sed "s/$sq/$dq/g" file
答案 2 :(得分:4)
问题不是sed,而是你的shell在它们进入sed之前解析引号。避免这种情况的一种非常简单的方法是使用脚本文件:
sed -f script_file List_employees_a.csv > List_employees.csv
其中script_file的内容为:
s/'/''/g
答案 3 :(得分:2)
在sh中的单引号字符串表示法中,唯一的特殊字符是单引号'
本身 - 即使反斜杠\
也不特殊。并置是连接,因此您可以将多个字符串符号串在一起:'foo''bar'
与"foobar"
相同,'foo'\''bar'
和'foo'"'"'bar'
都与“foo'bar”相同
您不必使用单引号表示法:
sed -e "s/'/\"/g"
但如果你真的想,你可以写
sed -e 's/'\''/"/g'
或
sed -e 's/'"'"'/"/g'
答案 4 :(得分:1)
我不是一个sed专家所以我不确定你试图用(')等来实现。你在评论中写道你需要替换'with',那你为什么要在你的尝试中写'' ?
无论如何,我做了一些测试,正常的报价逃脱对我来说。希望它有所帮助。
sed -e s/\'/\'\'/g List_employees_a.csv > List_employees.csv