在包括条件关键字和特定字符的长行上使用 sed

Using sed on a long line including conditions keywords and specific characters

我的 .bash_profile 文件中有该行:

if [ -f ~/.bash_profile.tomcat_8.5 ]; then . ~/.bash_profile.tomcat_8.5; fi

我想用

替换整行

if [ -f ~/.bash_profile.tomcat ]; then . ~/.bash_profile.tomcat; fi

我对所有 / 都感到很吃力,然后我了解到检查这个站点,你可以在 sed 中使用任何定界符,这非常方便。但是,我仍然不能做我想做的事。

这是我尝试过的,使用 + 定界符:

sed -i "s+if [ -f ~/.bash_profile.tomcat_8.5 ]; then . ~/.bash_profile.tomcat_8.5; fi+if [ -f ~/.bash_profile.tomcat ]; then . ~/.bash_profile.tomcat; fi+" /tmp/.bash_profile

我什至尝试过使用变量:

Delete='if [ -f ~/.bash_profile.tomcat_8.5 ]; then . ~/.bash_profile.tomcat_8.5; fi'

Add='if [ -f ~/.bash_profile.tomcat ]; then . ~/.bash_profile.tomcat; fi'

sed -i "s+$Delete+$Add+g" /tmp/.bash_profile

我试过用 {} 围绕变量,单引号,双引号。 我想知道这是否是一个我无法解决的基本问题,因为我缺少一些简单的东西,或者它是否因为所有特定的关键字/字符而更深层次。

提前谢谢你。

[ ] 在正则表达式中有特殊含义(还有 . 和扩展正则表达式中的 +,但这不影响这里) .阅读 regular expressions。使用反斜杠转义特殊字符。

做:

sed 's!something \[ something \] something\.something!!'