单引号不能在单引号内转义,因此'\''
在 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/
成为语法错误)
使用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/'
之后"'"
(一个双引号单引号),然后是'/"/'
。
还要注意的是,如果你想模仿tr
的sed
,如果你想要做单个字符音译,然后使用,即y///
是多比使用更有效s///g
(注意/g
有):
sed y/\'/\"/
Run Code Online (Sandbox Code Playgroud)