引用符の間のカンマを無視し、カンマで区切られた文字列を解析します。

引用符の間のカンマを無視し、カンマで区切られた文字列を解析します。

コンマで囲まれた要素を含めることができるカンマで区切られた文字列があります。たとえば、

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

おすすめ記事