定期表达以获取tomcat连接器

时间:2018-05-16 13:41:24

标签: regex

我一直在尝试定期表达。我想在tomcat service.xml文件中提取sslconnector。

这是我文件的输入。



<?xml version='1.0' encoding='utf-8'?>
<Server port="${shutdown.port}" shutdown="5ijXSyVl4Y9r">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <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>

  <Service name="Catalina">



    <Connector port="${http.port}" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="${https.port}" />


         <Connector port="${https.port}" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               keystoreFile="/opt/ais/install/tomcat/security/ais.jks" keystorePass="a1ss3cr3t"
               clientAuth="false" sslEnabledProtocols="TLSv1.1,TLSv1.2" />


    <Connector port="${ajp.port}" protocol="AJP/1.3" redirectPort="${https.port}" connectionTimeout="20000"/>
    <Connector port="${ajp.port}" protocol="AJP/1.3" redirectPort="${https.port}" connectionTimeout="20000"/>



    <Engine name="Catalina" defaultHost="localhost" jvmRoute="${tomcat.node.name}">


      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="access_log" pattern="%h %l %u %t %r %s %b %D %I %{JSESSIONID}c" resolveHosts="false" rotatable="false"/>

      </Host>
    </Engine>
  </Service>
</Server>
&#13;
&#13;
&#13;

我正在尝试这个sed句子。 &#34; sed -n&#39; /&lt;。 [抄送] onnector。 /&gt; / p&#39; &#34;但不看,我只能得到ajp连接器。

一些想法?

1 个答案:

答案 0 :(得分:0)

以下(GNU)sed可能有效:

sed -n '/<Connector /,/\/>/p'

它从包含<Connector 的行打印到包含下一个/>的行(可以是同一行)。

它适用于您的示例数据,但在许多情况下可能会失败,例如标记包含子项并被</Connector>关闭而不是自动关闭。如果您的数据有足够的变体,您可能希望使用XML选择语言,例如XPath,其中//Connector足以获得所有连接器节点,无论其格式如何。