在包括条件关键字和特定字符的长行上使用 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!!'
我的 .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!!'