2つのデジタル証明書を含むファイルの一部をフィルタリングしようとしています。デフォルトでは、最初の部分(Cert1と仮定)は必要ですが、2番目の部分(Cert2)は望ましくありません。
ファイルの内容は次のとおりです。
-----BEGIN CERTIFICATE-----
AAAA
AAAA
ETC
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AAAA
AAAA
ETC
-----END CERTIFICATE-----
私はこれが私にCert1の内容を提供するという印象を受けました。(最初のBEGINと最初のENDの間の最初の部分):
cat /etc/nginx/cert.pem | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
しかし、何らかの理由で、2番目のBEGINと2番目のENDの間のすべての内容が引き続き表示されます。(基本的には何も変わりません。すべてが同じです。)。
どんなアドバイス?
答え1
ほぼすべて来ました:
sed -ne '
/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p # got the range, ok
/-END CERTIFICATE-/q # bailing out soon as the cert end seen
' /etc/nginx/cert.pem
ただし、証明書の開始タグと終了タグの行も出力の一部です。
答え2
これを行うには、次のsedコマンドを使用できます。
sed '/-----END CERTIFICATE-----/q' /etc/nginx/cert.pem
q
sed に終了を指示する終了コードです。したがって、sedはファイルの先頭から印刷して「-----END CERTIFICATE----」パターンに出会うと終了します。これにより、最初の証明書が終了すると停止します。
catの出力をsedにパイプする必要もありません。 sedコマンドにファイル名を指定するだけです。
源泉 -http://www.theunixschool.com/2011/09/sed-selective-printing.html