Linux Can';用sed替换反斜杠

Linux Can';用sed替换反斜杠,linux,replace,sed,Linux,Replace,Sed,我正在尝试查找\STRING1\并将其替换为\STRING2\(注意反斜杠) 我尝试了以下方法: find ./ -type f -exec sed -i "s/\\STRING1\\/\\STRING2\\/g" {} \; 它不起作用,我得到了以下错误:sed:-e表达式#1,char 21:unterminated's命令 我在网上搜索过,人们建议在我想搜索和/或替换的任何反斜杠上添加两个反斜杠。所以我试了一下: find ./ -type f -exec sed -i "s/\\\ST

我正在尝试查找\STRING1\并将其替换为\STRING2\(注意反斜杠)

我尝试了以下方法:

find ./ -type f -exec sed -i "s/\\STRING1\\/\\STRING2\\/g" {} \;
它不起作用,我得到了以下错误:sed:-e表达式#1,char 21:unterminated's命令

我在网上搜索过,人们建议在我想搜索和/或替换的任何反斜杠上添加两个反斜杠。所以我试了一下:

find ./ -type f -exec sed -i "s/\\\STRING1\\\/\\\STRING2\\\/g" {} \;
这次我没有出错,但它什么也没做。有什么问题吗?

使用单引号:

> echo "some text\STRING1\ and some more \STRING1\andeven more" | sed 's/\\STRING1\\/\\STRING2\\/g'
some text\STRING2\ and some more \STRING2\andeven more

如果要用双引号引用
sed
命令,则必须使用四个反斜杠来获取模式中的单个文字反斜杠:

find ./ -type f -exec sed -i "s/\\\\STRING1\\\\/\\\\STRING2\\\\/g" {} \;

这是因为反斜杠是双引号shell字符串的活动元字符,因此shell会将反斜杠的数量减半,然后
sed
。或者,按照另一个答案中的建议使用单引号。

您需要使用单引号字符串。
如果使用双引号,则shell将对字符串进行预处理,sed只接收一个反斜杠。

我认为您没有考虑查找结果是的。除非希望shell展开变量或在参数内执行其他文本替换,否则shell中的命令参数始终使用单引号。然后,双引号就是你想要的。@user1336449:是的,我想你可以算出那个部分。只需在语句中用单引号替换双引号。不需要其他改变。