You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式提取Tomcat server.xml中的SSL Connector?

如何从Tomcat的server.xml中提取SSL Connector?

你的问题出在原sed命令只匹配单行自闭合的Connector标签——也就是整个<Connector ... />必须在同一行内,而如果你的SSL Connector配置是换行拆分的(很多生产环境会这么写提升可读性),或者你想精准筛选SSL相关的Connector而非所有Connector,这个命令就失效了。下面给你几个可行的解决思路:

1. 精准匹配SSL专属的Connector(推荐)

不管Connector是单行还是多行,我们可以通过SSL特有的属性(比如SSLEnabled="true")来筛选,这样不会误抓HTTP/AJP的Connector:

用sed处理多行场景

如果你的SSL Connector是多行排版的,这个sed命令会从<Connector开始,自动读取后续行直到找到闭合的/>,然后检查是否包含SSL启用属性:

sed -n '/<Connector/{:a;N;/\/>/!ba;/SSLEnabled="true"/p}' server.xml

拆解一下逻辑:

  • /<Connector/:定位到Connector标签的起始行
  • :a和N:循环读取下一行,把内容合并到当前匹配空间
  • /\/>/!ba:如果还没找到闭合的/>,就继续循环读取
  • /SSLEnabled="true"/p:确认包含SSL启用属性后,打印整个Connector片段

用GNU grep快速匹配

如果你用的是GNU grep,这个命令可以把整个文件当作一个字符串处理,直接提取符合条件的Connector:

grep -zPo '<Connector[^/>]*SSLEnabled="true"[^/>]*\/>' server.xml
  • -z:将文件视为单一长字符串,忽略换行
  • -Po:使用Perl正则,只输出匹配到的内容
  • 正则部分确保只抓取包含SSLEnabled="true"的自闭合Connector标签

2. 修复原sed命令(仅适用于单行Connector)

如果你的SSL Connector确实是单行但没被抓到,可能是原正则没考虑行首的缩进,调整后就能匹配所有单行Connector:

sed -n '/^[[:space:]]*<Connector.*\/>/p' server.xml

^[[:space:]]*用来匹配行首可能存在的空格或制表符缩进,确保不会漏掉带缩进的标签。

3. 用XML工具处理(最佳实践)

正则处理XML始终有局限性(比如标签嵌套、注释干扰等),用专门的XML解析工具才是最可靠的方案,比如xmllint:

xmllint --xpath '//Connector[@SSLEnabled="true"]' server.xml

这个命令会直接提取所有带有SSLEnabled="true"属性的Connector节点,不管格式如何,结果精准且不易出错。

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:04:37