server.xml
파일의 값을 수정하고 싶습니다 .
<?xml version='1.0' encoding='utf-8'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Note: A "Server" is not itself a "Container", so you may not
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
<Server port="9001" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<!--
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
-->
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<!-- A "Service" is a collection of one or more "Connectors" that share
a single "Container" Note: A "Service" is not itself a "Container",
so you may not define subcomponents such as "Valves" at this level.
Documentation at /docs/config/service.html
-->
<Service name="Catalina">
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8180" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8181" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
This connector uses the NIO implementation that requires the JSSE
style configuration. When using the APR/native implementation, the
OpenSSL style configuration is required as described in the APR/native
documentation -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host).
Documentation at /docs/config/engine.html -->
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvmB04905-2">
<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
<!-- Use the LockOutRealm to prevent attempts to guess user passwords
via a brute-force attack -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="false">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
jvmRoute=
이 값을 다른 값으로 바꾸고 싶습니다 .
예:
이전 값:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvmB04905-2">
새 값:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="VALUE10">
이 명령을 실행할 때:
sed -i '/^jvmRoute=/s/=.*/=VALUE10/' server.xml
내 파일에는 아무것도 변경되지 않았습니다. 왜 그렇습니까?
답변1
sed
파일에 string 으로 시작하는 줄이 포함되어 있지 않기 때문에 명령은 아무것도 변경하지 않습니다 jvmRoute
.
XML 구문 분석은 XML 구문 분석기를 사용하여 수행되어야 합니다.
XMLStarlet은 좋은 명령줄 파서입니다.
$ xml ed -u '//Engine/@jvmRoute' -v 'VALUE10' server.xml >server-new.xml
jvmRoute
그러면 모든 노드의 속성 값이 Engine
문자열로 변경되고 VALUE10
결과 XML이 server-new.xml
.
Engine
다음을 사용하여 노드 값만 변경하십시오 defaultHost="localhost"
.
xml ed -u '//Engine[@defaultHost="localhost"]/@jvmRoute' -v 'VALUE10' server.xml >server-new.xml
XMLStarlet은 다음에서 사용할 수 있습니다.http://xmlstar.sourceforge.net/, 하지만 먼저 패키지 관리자를 확인하세요. xmlstarlet
때로는 XMLStarlet 실행 파일이 xml
.
답변2
그리고 sed
:
sed -E 's/(jvmRoute=)([a-zA-Z0-9"-])+/\1"VALUE10"/g'
원래 값이 무엇인지 지정하지 않았기 때문에 jvmRoute
위 예에 대한 정규식을 작성했지만 필요에 따라 사용자 정의할 수 있습니다.
파일에서 직접 바꾸려면 다음을 사용하십시오.
sed -i -E 's/(jvmRoute=)([a-zA-Z0-9"-])+/\1"VALUE10"/g' server.xml
그러나 XML 파서를 사용하는 것이 아마도 가장 좋은 방법일 것입니다.
답변3
sed 's/patternFrom/patternTo/' file.txt
• "s/"는 다음을 바꾸는 것을 의미합니다. 이제 한 줄 명령을 입력하여 이 바꾸기를 파일에 적용해야 합니다.
• sed는 선택한 행 세트에만 명령을 적용할 수 있습니다. 줄은 줄 1부터 시작하여 파일 내에서 점진적인 번호 매기기로 식별됩니다.
예를 들어:
sed '2s/patternFrom/patternTo' file.txt
• 두 번째 라인에서만 교체 수행
또는
sed '2,$s/patternFrom/patternTo' file.txt
• 라인 2부터 특수 기호 "$"로 식별되는 마지막 라인까지 교체를 수행합니다.
심지어
• sed에는 보유 공간이라는 내부 버퍼가 포함되어 있습니다. 이 버퍼는 "g"와 같은 특정 명령으로 활성화될 수 있습니다. 'g' 명령은 입력 라인에서 일치 항목이 반복될 수 있도록 예약된 공간으로 현재 입력 라인을 대체합니다.
귀하의 경우 모든 줄에서 다음 항목을 모두 일치시키십시오.
sed 's/patternFrom/patternTo/g' file.txt
내가 생각하기에 작동하지 않는 것은 패턴이다
정규식이 유효한지 확인하려면 다음을 사용해 보세요.
sed 's/jvmRoute="[a-zA-Z0-9-\.]*["]/jvmRoute="VALUE10"/g
답변4
"jvmRoute"로 시작하는 줄이 없습니다. ( ^
줄의 시작을 나타냅니다. 파일에서 두 항목을 모두 변경하려면 생략하세요.)