我正在尝试编写 postfix 服务器部署脚本,并相应地创建 DNS 记录。防晒指数; DMARC 和 DKIM。前两个非常简单,但我正在努力从 opendkim 生成的文件中提取记录。
这是 opendkim 给我的文件:
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; t=y; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK9yGy7orNIceonobdyTxr0USLo9XlWoo2/hg5MU5Ix+7bKFN0exJIUEeNLDAOYXWZe/0vQZan3+vnry9v3pVxqwpNp/92/xbp0pILJBzc1i5YXFe60XAlBBWq+Y9UAY2uXXsiFY4IUmhGZdMCubuHguWy/R2HDmCwrtN5vn0XfQIDAQAB" ) ; ----- DKIM key mail for localhost
我想要一个适合 dns 记录的输出,例如
"v=DKIM1; h=sha256; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK9yGy7orNIceonobdyTxr0USLo9XlWoo2/hg5MU5Ix+7bKFN0exJIUEeNLDAOYXWZe/0vQZan3+vnry9v3pVxqwpNp/92/xbp0pILJBzc1i5YXFe60XAlBBWq+Y9UAY2uXXsiFY4IUmhGZdMCubuHguWy/R2HDmCwrtN5vn0XfQIDAQAB"
我已经尝试了几件事,但我什至无法使用我在这里找到的命令提取括号之间的内容:grep:正则表达式仅用于匹配括号之间的任何内容
看起来有一些线路返回问题或者我不知道
感谢您的阅读,抱歉英语不好!祝你今天过得愉快
答案1
使用 GNU awk
,您可以将FPAT
每个记录拆分为键值对,循环遍历字段并将它们附加到字符串中。在 END 部分中,打印字符串以及开头和结尾"
。
awk -v FPAT='.=[^;"]+(; )?' '{
for (i=1;i<=NF;i++) s=s $i
}
END {
print "\"" s "\""
}' file
答案2
假设 GNU grep
,我会挑选出带引号的字符串,然后将它们连接在一起
grep -oP '".*?"' file | tr -d '\n' | sed 's/" *"//g'; echo
您的示例的结果(为简洁起见缩短)
"v=DKIM1; h=sha256; k=rsa; t=y; p=MIGfMA0GCSqG…QAB"
或者你可以使用perl
,
perl -e '
$_ = join(" ", (map {chomp; $_} <>)); # Read and join lines
s/^.*?(".*").*$/$1/; # Strip leading and trailing text outside quoted strings
s/"\s*"/ /g; # Merge adjacent quoted strings
s/\s\s+/ /g; # Reduce multiple spaces to one
print # Output the result
' file