如何使用awk与grep匹配包含换行符的跨行XML配置模式
解决方案
方案1:使用支持PCRE的grep(适配Linux环境)
你之前的grep命令主要问题是正则没有正确匹配两行之间的空白字符,且参数搭配有误,正确命令如下:
grep -Pzo '(?s)<service id="http-upgrade-service" class="HTTPUpgrade">\s*<maxHeaderSize>65536</maxHeaderSize>' 你的文件路径
参数说明:
-P:启用PCRE正则语法-z:将文件内容按NUL字符分隔读取,相当于把整个文件加载为单个字符串处理,支持跨行匹配-o:仅输出匹配到的内容(?s):开启单行模式,允许.匹配换行符\s*:匹配两行之间的所有空白字符(包括缩进、换行、制表符),适配代码里的缩进格式
方案2:使用awk(全平台通用,兼容性更好)
如果你的环境没有支持PCRE的grep(比如macOS默认grep),可以用awk实现精准匹配,避免误匹配其他位置的maxHeaderSize:
awk '/\s*<service id="http-upgrade-service" class="HTTPUpgrade">/{ line1 = $0 getline if (/^\s*<maxHeaderSize>65536<\/maxHeaderSize>/) { print line1 print $0 } }' 你的文件路径
逻辑说明:
- 先匹配到
<service>开头的目标行,暂存当前行内容 - 读取下一行,判断是否为目标
maxHeaderSize行 - 只有两行连续匹配成功才输出,完全排除其他位置的同参数干扰
内容的提问来源于stack exchange,提问作者mjd
相关产品推荐
相关产品推荐

