我需要将 /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,无论您如何尝试转义它,都无法在单引号字符串中嵌入单引号。
一些选项:
- 按照 ilkkachu 建议使用双引号:
"s/'/\"/g"
- 连接字符串段:
's/'"'"'/"/g'
或's/'\''/"/g'
- 使用一个ANSI-C 引用:
$'s/\'/"/g'
- 不要引用整个内容,转义需要转义的字符:
s/\'/\"/g
答案3
对于单个字符更改,tr
可能是最快的:
tr \' \" <infile >outfile
请注意,两个引号都需要在 shell 环境中转义。或者要在同一文件中替换,请使用sponge
(来自moreutils
包)
tr \' \" <infile | sponge infile