如何用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
相关产品推荐
相关产品推荐

