我正在尝试找到\ STRING1 \并将其替换为\ STRING2 \(请注意反斜杠)
我尝试了以下内容:
find ./ -type f -exec sed -i "s/\\STRING1\\/\\STRING2\\/g" {} \;
它没有用,我收到了这个错误:sed:-e expression#1,char 21:unterminated`s s命令
我搜索了网页,人们建议在我想要搜索和/或替换的任何反斜杠上添加两个反斜杠。所以我尝试了这个:
find ./ -type f -exec sed -i "s/\\\STRING1\\\/\\\STRING2\\\/g" {} \;
这次我没有犯错,但它没有做任何事情。有什么问题?
答案 0 :(得分:3)
使用单引号:
> echo "some text\STRING1\ and some more \STRING1\andeven more" | sed 's/\\STRING1\\/\\STRING2\\/g'
some text\STRING2\ and some more \STRING2\andeven more
答案 1 :(得分:0)
如果要引用带有双引号的sed
命令,则必须使用四倍反斜杠在模式中获取单个字面反斜杠:
find ./ -type f -exec sed -i "s/\\\\STRING1\\\\/\\\\STRING2\\\\/g" {} \;
这是因为反斜杠是双引号shell字符串的实时元字符,因此shell将反斜杠的数量减半,然后sed
也是如此。或者,使用另一个答案中建议的单引号。
答案 2 :(得分:0)
您需要使用单引号字符串。 如果使用双引号,则shell会预处理字符串,sed只接收单个反斜杠。