用sed无法逃脱反斜杠

时间:2014-01-18 01:01:20

标签: linux replace sed

我正在尝试找到\ 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" {} \;

这次我没有犯错,但它没有做任何事情。有什么问题?

3 个答案:

答案 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只接收单个反斜杠。