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

如何用grep仅提取DMARC记录中的p=策略值?

提取DMARC记录中p=对应的策略值

问题场景

当前使用的命令:

nslookup -type=TXT "_dmarc.$domain" | grep -Eo '\s*reject|\s*quarantine|\s*none|\s*no answer' || echo "no answer"

在遇到包含sp=none的DMARC记录(如v=DMARC1; p=reject; sp=none; adkim=s; aspf=s; rua=mailto:dmarc@domain.com; ruf=mailto:dmarc@domain.com)时,会同时输出reject和none,无法仅提取p=对应的策略值。

解决方法

方法1:改进grep正则匹配

通过精准匹配p=前缀的策略项,再提取对应值:

nslookup -type=TXT "_dmarc.$domain" | grep -Eo 'p=(reject|quarantine|none)' | cut -d= -f2 || echo "no answer"
  • 原理:p=(reject|quarantine|none)只匹配以p=开头的目标策略值,避免匹配sp=等其他字段;
  • cut -d= -f2将匹配结果按等号分割,取出第二个字段(即策略值)。

方法2:用awk灵活处理字段

awk可以更灵活地解析DMARC记录的键值对:

nslookup -type=TXT "_dmarc.$domain" | awk -F'[;= ]' '{for(i=1;i<=NF;i++) if($i=="p") print $(i+1)}' || echo "no answer"
  • 原理:以;、=、空格作为字段分隔符,遍历所有字段,找到键为p的项后,输出其下一个字段(对应的值);
  • 适配不同格式的DMARC记录,即使字段顺序变化也能正常提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:25:01