sed replace命令

时间:2012-06-18 11:22:11

标签: shell sed

我想根据条件取消注释这两个语句中的一个:

#export CATALINA_OPTS="-javaagent:$TOMCAT_INSTALL_LOCATION/$APACHE_TOMCAT_VERSION/lib/oi-mule-libs/usage/injector.jar"

#export CATALINA_OPTS="-javaagent:$TOMCAT_INSTALL_LOCATION/$APACHE_TOMCAT_VERSION/lib/agents/cl-proxy-agent.jar"

我使用了以下sed命令:

 #sed -i 's/#export CATALINA_OPTS="-javaagent:$TOMCAT_INSTALL_LOCATION/$APACHE_TOMCAT_VERSION/lib/oi-mule-libs/usage/injector.jar"/export CATALINA_OPTS="-javaagent:$TOMCAT_INSTALL_LOCATION/$APACHE_TOMCAT_VERSION/lib/oi-mule-libs/usage/injector.jar"/' $TOMCAT_HOME/bin/init-script.sh

我收到了以下错误:

sed: -e expression #1, char 85: unknown option to `s'

为什么我收到此错误?

如何通过修改上述命令来实现我的目的?

2 个答案:

答案 0 :(得分:0)

您应该将分隔符更改为sed命令。您的分隔符是'/',它也会在您的模式中出现,并且会出错。试试这个:

sed 's:<pattern to be replaced>:<replacement pattern>:g'

这里g代表全局,s代表替代。您可以使用未出现在模式中的任何其他分隔符,我在示例中使用了冒号':'

答案 1 :(得分:0)

你需要使用反斜杠转义斜杠字符或使用另一个字符作为“s”ubstitute命令的分隔符(如sleep_dragon所指出的)
考虑到这一点:

 sed -e s/^#(.*\/injector.jar.*)/\1/ -e s/^#(.*\/cl-proxy-agent.jar.*)/\1/ $my_file

使圆括号中的正则表达式根据需要唯一,以标识您需要取消注释的确切字符串。