我正在努力用特殊字符替换字符串。我使用下面的命令并尝试转义每个特殊字符,但仍然出现错误。
如果我不使用特殊字符,查询可以正常工作,但我必须使用特殊字符。
要查找的字符串:../../../profileone
要替换的字符串:@mysettings/future-system-one
询问:
sed -i s/"../../../profileone"/"@mysettings/future-system-one"/g *.fileExtension'
我想从詹金斯管道尝试这个命令。
答案1
实际上,那里没有任何特殊字符,因此您无需转义任何内容。唯一的问题是您使用的/
是模式分隔符,因此只需使用另一个字符,它就可以正常工作:
sed 's|../../../profileone|@mysettings/future-system-one|g' *.fileExtension
注意sed
命令是如何引用的,这很重要。
现在,您的问题将目标字符串显示为../../../profileone
和@mysettings/future-system-one
,但您的命令还包含双引号。如果这些应该是字符串的一部分,请改用此命令:
sed 's|"../../../profileone"|"@mysettings/future-system-one"|g' *.fileExtension
答案2
按照@steeldriver 的评论,您可以将模式分隔符从 更改/
为_
:
sed -i s_"../../../profileone"_"@mysettings/future-system-one"_g *.fileExtension'
这样您就不需要以/
这种方式逃避一切:
sed -i s/"..\/..\/..\/profileone"/"@mysettings\/future-system-one"/g *.fileExtension'