postfixサーバー配布スクリプトを作成し、それに応じてDNSレコードを生成しようとしています。 SPFとDKIM。最初の2つは非常に簡単ですが、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