将文件中的单引号替换为双引号

将文件中的单引号替换为双引号

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

我正在用这个

sed -i 's/'/\"/g' /tmp/myfile

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

请提供任何帮助。

答案1

取代单引号( ') 将 sed 命令放入其中是最简单的双倍的引号并在替换中转义双引号:

$ cat quotes.txt 
I'm Alice
$ sed -e "s/'/\"/g"  quotes.txt 
I"m Alice

请注意,单引号是不是双引号内特殊,因此不能转义。

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

$ cat ticks.txt
`this is in backticks`
$ sed -e 's/`/"/g'  ticks.txt
"this is in backticks"

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

也可以看看:

答案2

使用 bash,无论您如何尝试转义它,都无法在单引号字符串中嵌入单引号。

一些选项:

  1. 按照 ilkkachu 建议使用双引号:"s/'/\"/g"
  2. 连接字符串段:'s/'"'"'/"/g''s/'\''/"/g'
  3. 使用一个ANSI-C 引用:$'s/\'/"/g'
  4. 不要引用整个内容,转义需要转义的字符:s/\'/\"/g

答案3

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

tr \' \" <infile >outfile

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

tr \' \" <infile | sponge infile

相关内容