따옴표 사이의 쉼표를 무시하고 쉼표로 구분된 문자열을 구문 분석합니다.

따옴표 사이의 쉼표를 무시하고 쉼표로 구분된 문자열을 구문 분석합니다.

쉼표로 묶인 요소를 포함할 수 있는 쉼표로 구분된 문자열이 있습니다. 예를 들어:

issuer=C = US, O = "DigiCert, Inc.", CN = DigiCert High Assurance TLS Hybrid ECC SHA256 2020 CA1

인용된 쉼표( )를 무시하고 고유한 요소를 추출하고 싶습니다 DigiCert, Inc..

스크립트는 POSIX와 호환되어야 하며 GNU가 아닌 시스템에서 실행되어야 합니다.

답변1

당신이하지 않기 때문에생각하다일반적인 솔루션, 즉 해킹을 찾고 있고 강력한 솔루션을 원하지 않는 경우, 이것은 매우 해학적으로 보이지만 적어도 제공한 예제 입력이 합리적으로 가능한 것인 경우 올바른 출력을 생성합니다. 직면한 가장 복잡한 상황 처리 :

#!/usr/bin/env bash

set -o posix

grep '^[[:blank:]]*Issuer:' |
sed -Ee 's/^.* O[[:blank:]]*=[[:blank:]]*("[^"]*"|[^",]*),.*/\1/'

해커로서라도 누군가 필요하다면 개선될 수 있다고 확신합니다.

위의 코드는 POSIX와 거의 호환되며 GNU가 아닌 시스템에서 작동합니다.

$ grep -w Issuer: /usr/local/etc/ssl/cert.pem | head -5; \
    echo '...'; grep -w Issuer: /usr/local/etc/ssl/cert.pem | tail -5
        Issuer: C = ES, O = FNMT-RCM, OU = AC RAIZ FNMT-RCM
        Issuer: C = ES, O = FNMT-RCM, OU = Ceres, organizationIdentifier = VATES-Q2826004J, CN = AC RAIZ FNMT-RCM SERVIDORES SEGUROS
        Issuer: CN = ACCVRAIZ1, OU = PKIACCV, O = ACCV, C = ES
        Issuer: C = IT, L = Milan, O = Actalis S.p.A./03358520967, CN = Actalis Authentication Root CA
        Issuer: C = US, O = AffirmTrust, CN = AffirmTrust Commercial
...
        Issuer: C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust ECC Certification Authority
        Issuer: C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
        Issuer: C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 1999 VeriSign, Inc. - For authorized use only", CN = VeriSign Class 1 Public Primary Certification Authority - G3
        Issuer: C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 1999 VeriSign, Inc. - For authorized use only", CN = VeriSign Class 2 Public Primary Certification Authority - G3
        Issuer: C = US, OU = www.xrampsecurity.com, O = XRamp Security Services Inc, CN = XRamp Global Certification Authority
$ ./test.sh < /usr/local/etc/ssl/cert.pem | head -5; \
    echo '...'; ./test.sh < /usr/local/etc/ssl/cert.pem | tail -5
FNMT-RCM
FNMT-RCM
ACCV
Actalis S.p.A./03358520967
AffirmTrust
...
The USERTRUST Network
The USERTRUST Network
"VeriSign, Inc."
"VeriSign, Inc."
XRamp Security Services Inc

관련 정보