gsub:用一个字符串中的双撇号替换撇号

时间:2017-05-04 14:02:01

标签: linux bash shell awk

我想用shell脚本中的字符串替换所有撇号(直单引号)和双撇号。 我使用了以下gsub命令:

gsub(/'/, "''", string);

但我收到错误,因为我需要插入第二个单引号以匹配第一个。如果我尝试替换字符串的另一部分,它就可以正常工作。

3 个答案:

答案 0 :(得分:3)

执行此操作的正确方法是将任何文字'替换为\047的八进制代码:

$ echo "foo'bar" | awk '{gsub(/\047/,"&&")}1'
foo''bar

这是正确的方法,因为它可以在脚本文件中工作,也可以在regexp文字中工作(不像使用变量来保存引号字符会强制你使用动态正则表达式,具有某些情况下所需的额外复杂性。)

另外 - 不要试图使用十六进制代码\x27而不是八进制\047,因为十六进制不总是按预期运行,请参阅http://awk.freeshell.org/PrintASingleQuote

答案 1 :(得分:1)

你可以这样做:

s="jonn's and smith's band"
awk '{gsub(/\047/, "\047\047")} 1' <<< "$s"

jonn''s and smith''s band

047表示单引号字符'的八进制代码。

答案 2 :(得分:0)

你也可以使用:

$ {string // \&#34; / \&#39;}否定需要一起使用awk。