使用sed replace时转义斜线和左方括号

时间:2019-05-28 17:58:36

标签: shell sed

我必须编写简短的脚本来替换文件中的行。有些行包含斜杠和左方括号(也可能是右方)。

我知道应该使用另一个定界符将斜线替换为行。

我的代码:

sed -i -e "s|${oldLine}|${newLine}|g"

这会引发错误,因为行包含[。

要更改的示例字符串(oldLine变量):

// List exampleList = [

示例更改后的外观:

List exampleList = [

当有一些字符,例如[

要复制:

sed -i -e 's|// List exampleList = [|List exampleList = [|g' test.txt

1 个答案:

答案 0 :(得分:0)

您需要转义$ oldline和$ newline中的“坏”字符。命令

sed -e 's/\\/\\\\/g; s/\([[&()/\]]\)/\\\1/g'

\,[,&,(,),/,]替换为\\,\[,依此类推。因此,组合命令

sed -e "s/$(echo $oldline | sed -e 's/\\/\\\\/g; s/\([[&()/\]]\)/\\\1/g')/$(echo $newline | sed -e 's/\\/\\\\/g; s/\([[&()/\]]\)/\\\1/g')/g"

会做你想要的。