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



我的.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

我试过用{}绕过变量,用单引号,双引号。我想知道这是一个我无法解决的基本问题,是因为我错过了一些简单的东西,还是因为所有特定的关键词/字符而导致了更深层次的问题。

提前谢谢。

[]在正则表达式中有特殊意义(在.中也有,在扩展正则表达式中也有+,但这对这里没有影响(。阅读正则表达式。用反斜杠转义特殊字符。

Do:

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

相关内容

  • 没有找到相关文章

最新更新