如何编写包含特殊字符的复杂 sed 查询

如何编写包含特殊字符的复杂 sed 查询

我正在努力用特殊字符替换字符串。我使用下面的命令并尝试转义每个特殊字符,但仍然出现错误。

如果我不使用特殊字符,查询可以正常工作,但我必须使用特殊字符。

要查找的字符串:../../../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'

相关内容