sed 替换为反斜杠、双引号、单引号

sed replace with backslash, double quote, single quote

你能给出一个 sed 命令来找到 \" 并在文件中用 \' 替换吗?

例如行:

LOG_FN=\"file_name\"

会变成

LOG_FN=\'file_name\'

通过使用这个 template:

sed -i 's/old-text/new-text/g' input.txt

我尝试了以下 sed 命令:

sed -i 's/\\"/\\\'/g' input.txt

sed -i "s/\\"/\\'/g" input.txt

不幸的是,它们失败了,因为我正在寻找 \" 的字符串替换,而我尝试更改单个 " 个字符。

单引号内的单引号无法转义。您的第二次尝试需要更多反斜杠:请记住,在双引号内,shell 处理一层反斜杠,因此您必须将每个反斜杠加倍,这样才能达到 sed.

sed "s/\\\"/\\\\'/g" input.txt

shell处理完双引号字符串后,最终执行的脚本为

s/\"/\\'/g

其中第一对反斜杠在匹配的正则表达式中生成一个文字反斜杠,替换中的每对反斜杠在输出中生成一个文字反斜杠。

演示:https://ideone.com/XqfwbV