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

如何编写正则匹配日志中含指定域名的YAML文档并筛选输出

解决方案

直接用记录分隔符拆分YAML文档块后逐块筛选即可,不需要写复杂的多行环视正则,逻辑更稳定,也适配tail -F的流式实时输出场景。

推荐Perl单行命令(所有Linux发行版默认预装,适配流式场景)

tail -F logfile.log | perl -ne '
$/ = "\n---\n"; # 以单独成行的---作为文档分隔符
$| = 1; # 关闭输出缓冲,保证实时输出
# 匹配当前块含指定hostname规则就输出
print $_ if /hostname: .*?domain\.com/ || ($. == 1 && s/^---\n// && /hostname: .*?domain\.com/)
'

如果不需要特别严格区分单独成行的分隔符,也可以简化为:

tail -F logfile.log | perl -ne '$/="---"; $|=1; print $/.$_ if /hostname: .*?domain\.com/'

Awk实现版本(同样默认预装)

tail -F logfile.log | awk -v RS='\n---\n' '/hostname: .*domain\.com/{print "---\n"$0}'

实现思路

  1. 把输入的记录分隔符直接设置为YAML文档的分隔符---,不需要手动写正则拆分文档块,脚本内置的拆分逻辑性能更高、容错性更强
  2. 逐块检查是否包含符合规则的hostname字段,匹配成功就输出对应块
  3. 关闭输出缓冲保证tail -F场景下的实时性,不会出现日志延迟输出的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:48:04