1

我想tomcat server.xml用命令替换一些文件行sed

<Server port="8005" shutdown="SHUTDOWN">

为了

<Server port="8205" shutdown="SHUTDOWN">

<Connector port="8080" protocol="HTTP/1.1

为了

<Connector port="8280" protocol="HTTP/1.1

我试图这样做,但tmp_server_2.xml总是空的:

sed -e "s/<Server port=\"8005\" shutdown=\"SHUTDOWN\">/<Server port=\"$short_port\" shutdown=\"SHUTDOWN\">/" /company/$tomcat_port/conf/server.xml > tmp_server.xml;
sed -e "s/<Connector port=\"8080\" protocol=\"HTTP/1.1\"/<Connector port=\"$port\" protocol=\"HTTP/1.1\"/" ./tmp_server.xml > ./tmp_server_2.xml;

这是为什么 ?我怎样才能做到这一点 ?

4

1 回答 1

4

sed不理解您的第二个命令,因为您没有在这里转义斜杠:

sed -e "s/<Connector port=\"8080\" protocol=\"HTTP/1.1\"/<Connector port=\"$port\" protocol=\"HTTP/1.1\"/" ./tmp_server.xml > ./tmp_server_2.xml
                                                  ^                                               ^

因此:

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

由于斜杠用作s/// 分隔符,因此您必须将它们转义:

sed "s/<Connector port=\"8080\" protocol=\"HTTP\/1\.1/<Connector port=\"$port\" protocol=\"HTTP\/1.1\"/"

但是如果你只使用另一个分隔符会更容易。也可以使用单引号来避免转义双引号,但是不能用单引号扩展变量,所以:

sed 's:<Connector port="8080" protocol="HTTP/1\.1:<Connector port="'"$port"'" protocol="HTTP/1.1":'

点 ( .) 被转义,因为它是匹配任何字符的特殊字符。

于 2013-04-26T18:43:05.163 回答