cas*_*cas 9

单引号不能在单引号内转义,因此'\''在 shell 命令行或脚本中将单引号“嵌入”到单引号字符串中的标准方法也是如此。它实际上并没有嵌入单引号,但它达到了预期的最终结果。

'\''= '(结束报价) \'(转义报价) 和'(开始报价)。

换句话说,而不是:

sed 's/'/"/g'
Run Code Online (Sandbox Code Playgroud)

用:

sed 's/'\''/"/g
Run Code Online (Sandbox Code Playgroud)

或者,双引号可以在双引号内进行反斜杠转义,因此您可以使用:

sed "s/'/\"/g"
Run Code Online (Sandbox Code Playgroud)

小心这种形式 - 你必须转义你想被视为双引号内的字符串文字的 shell 元字符。例如,sed 's/foo/$bar/'将 foo 替换为字符串字面量$bar,而sed "s/foo/$bar/"将 foo 替换为当前 shell$bar变量的值(如果未定义则不替换。注意:变量的某些值$bar可能会破坏 sed 命令 - 例如,如果$bar包含未转义的分隔符例如bar='a/b',这会导致 sed 命令s/foo/a/b/成为语法错误)


Kus*_*nda 5

使用tr(如果您想在整个文件中全局执行):

tr "'" '"' <infile >outfile
Run Code Online (Sandbox Code Playgroud)

正在做

sed 's/'/"/'
Run Code Online (Sandbox Code Playgroud)

您基本上sed 's/'跟在/"/', 它是一个斜杠和一个未闭合的双引号字符串。

sed s/\'/\"/
Run Code Online (Sandbox Code Playgroud)

你没有这样的问题。

如果引用sed表达式感觉更好(在这种情况下不需要),请执行

sed 's/'"'"'/"/'
Run Code Online (Sandbox Code Playgroud)

sed 's/'之后"'"(一个双引号单引号),然后是'/"/'

还要注意的是,如果你想模仿trsed,如果你想要做单个字符音译,然后使用,即y///比使用更有效s///g(注意/g有):

sed y/\'/\"/
Run Code Online (Sandbox Code Playgroud)

  • 对我来说 `tr \' \"` 看起来更好。 (2认同)

小智 5

  echo "don't forget that" | sed 's/\x27/\"/'
Run Code Online (Sandbox Code Playgroud)


Hau*_*ing 1

无需引用整个sed表达式:

echo \' | sed s/\'/\"/
Run Code Online (Sandbox Code Playgroud)