我想用shell脚本中的字符串替换所有撇号(直单引号)和双撇号。 我使用了以下gsub命令:
gsub(/'/, "''", string);
但我收到错误,因为我需要插入第二个单引号以匹配第一个。如果我尝试替换字符串的另一部分,它就可以正常工作。
答案 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。