파일에서 DKIM 레코드를 추출하는 정규식

파일에서 DKIM 레코드를 추출하는 정규식

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수 있습니다 . FPATEND 섹션에서 시작 및 끝과 함께 문자열을 인쇄합니다 ".

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

관련 정보