2

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

5 回答 5

4

这个 sed 应该工作:

sed 's/'\''/'\'''\''/g'

或使用双引号作为分隔符:

sed "s/'/''/g"

或者更详细:

sq="'"
dq="''"
sed "s/$sq/$dq/g" file
于 2013-07-08T13:26:00.327 回答
4

问题不在于 sed,而是您的 shell 在引号到达 sed 之前就对其进行了解析。避免这种情况的一种非常简单的方法是使用脚本文件:

sed -f script_file List_employees_a.csv > List_employees.csv

其中 script_file 的内容是:

s/'/''/g
于 2013-07-08T13:26:10.943 回答
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
于 2013-07-08T13:25:41.683 回答
2

在 sh 中的单引号字符串表示法中,唯一的特殊字符是单引号'本身——甚至反斜杠\也不特殊。并列是连接,因此您可以将多个字符串表示法串在一起:'foo''bar'与 相同"foobar",并且'foo'\''bar''foo'"'"'bar'都与“foo'bar”相同。

您不必使用单引号表示法:

sed -e "s/'/\"/g"

但如果你真的想,你可以写

sed -e 's/'\''/"/g'

或者

sed -e 's/'"'"'/"/g'
于 2013-07-08T13:27:37.130 回答
1

我不是 sed 专家,所以我不确定您尝试使用 (') 等实现什么。并且您在评论中写道,您需要将 ' 替换为 ",那么为什么要在尝试中写 ' '?

无论如何,我做了一些测试,并且引用的正常转义为我做了。希望能帮助到你。

sed -e s/\'/\'\'/g List_employees_a.csv > List_employees.csv
于 2013-07-08T13:34:30.950 回答