如何用'sed'代替?

时间:2013-07-08 13:20:31

标签: bash sed

我尝试在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

5 个答案:

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