所以我试图从 grep 命令获取某些输出
这是我正在尝试的命令
nslookup -type=TXT "_dmarc.$domain" | grep -Eo '\s*reject|\s*quarantine|\s*none|\s*no answer' || echo "no answer"
它对于普通域来说工作得很好。 当 dmarc 记录有此输出时,麻烦就开始了
v=DMARC1; p=reject; sp=none; adkim=s; aspf=s; rua=mailto:[email protected]; ruf=mailto:[email protected]
我对 grep 不太了解,但我厌倦了使用匹配大小写,但现在输出是
root@main-room:~/spfscript/newupdate# nslookup -type=TXT "_dmarc.domain.com" | grep -Eo '\s*reject|\s*quarantine|\s*none|\s*no answer' || echo "no answer"
reject
none
root@main-room:~/spfscript/newupdate#
因为
p=reject
和 sp=none
我无法控制 grep 只向我提供“p=”策略
请帮助我
让我知道我还能做些什么。 我尝试添加空间,但我不确定我做得是否正确。
您需要在要查找的单词之前匹配
p=
,并且p
之前必须有一个空格,这样就不会匹配sp=
。
grep -Eo ' p=(reject|quarantine|none|no answer)'
分配变量后,您可以从开头删除
p=
。
如果您使用 GNU grep,则可以使用 PCRE。然后
p=
可以是后视,之后您不必删除它,并且您可以使用 \b
来匹配单词边界。
grep -Po '(?<=\bp=)(reject|quarantine|none|no answer)'