如何列印第一次出現的一對字串之間的文字?

如何列印第一次出現的一對字串之間的文字?

我正在嘗試過濾包含 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

相關內容