用双引号替换文件中的单引号

gr6*_*r68 3 sed

我需要将 /tmp/myfile 中包含的所有单引号 ' 替换为 "(双引号)

我正在使用这个

sed -i 's/'/\"/g' /tmp/myfile
Run Code Online (Sandbox Code Playgroud)

和其他组合,但我找不到有效的方法。

请任何帮助。

ilk*_*chu 10

要替换单引号( '),最简单的方法是将 sed 命令放在引号内并在替换中转义双引号:

$ cat quotes.txt 
I'm Alice
$ sed -e "s/'/\"/g"  quotes.txt 
I"m Alice
Run Code Online (Sandbox Code Playgroud)

请注意,单引号在双引号中并不特殊,因此不能对其进行转义。

相反,如果想要替换反引号( `),正如最初提到的问题,它们可以在单引号中按原样使用:

$ cat ticks.txt
`this is in backticks`
$ sed -e 's/`/"/g'  ticks.txt
"this is in backticks"
Run Code Online (Sandbox Code Playgroud)

在双引号内,您需要用反斜杠转义反引号,否则它会启动旧格式的命令替换。

也可以看看:

  • 此外,`sed` 中的 `y/'/"/` 用于有效地在两组字符之间进行音译。 (4认同)
  • 如果您仍然想要单引号的绝对健壮性(在所有 Bourne-family-tree shell 中与双引号不同且*安全*和*简单*),在单引号中转义单引号的正确方法是` '\''`。(结束单引号,反斜杠-转义单引号,恢复单引号。)记住它。把它烧进你的脑海。它会让你的生活更美好,其他人的生活也会更美好,整个世界也会更美好,等等。 (2认同)

Fel*_*xJN 6

对于单个字符更改,tr可能是最快的:

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

请注意,这两个引号都需要在 shell 环境中转义。或者在同一个文件中替换,使用sponge(来自moreutils包)

tr \' \" <infile | sponge infile
Run Code Online (Sandbox Code Playgroud)


gle*_*man 6

使用 bash,您不能在单引号字符串中嵌入单引号,无论您如何尝试对其进行转义。

一些选项:

  1. 使用双引号作为 ilkkachu 建议: "s/'/\"/g"
  2. 连接字符串段:'s/'"'"'/"/g''s/'\''/"/g'
  3. 使用ANSI-C 引号$'s/\'/"/g'
  4. 不要引用整件事,转义需要转义的字符: s/\'/\"/g