쉼표로 묶인 요소를 포함할 수 있는 쉼표로 구분된 문자열이 있습니다. 예를 들어:
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