
我正在嘗試過濾包含 2 個數位憑證的檔案的一部分。基本上,我想要第一部分(比如說 Cert1)而不是第二部分(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'
但出於某種原因,它仍然向我顯示第二個 BEGIN 和第二個 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