postfix 서버 배포 스크립트를 작성하고 그에 따라 DNS 레코드를 생성하려고 합니다. SPF 및 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