我想用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;
为什么? 我怎么能这样做?
答案 0 :(得分: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":'
点(.
)被转义,因为它是一个匹配任何字符的特殊字符。