簡體   English   中英

使用 grep/awk/sed 在某個單詞之后對整個文本進行 grep

[英]Grep the entire text after a certain word using grep/awk/sed

我們使用 Hashicorp 保險庫來存儲證書和密鑰。 我想檢索存儲在保險庫中的證書/密鑰。 使用 Vault API 命令,我得到以下輸出

vault get /mysecret.key
output:
====== Data ======
Key         Value
---         -----
password    -----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
-----END RSA PRIVATE KEY-----

預期輸出:

-----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
-----END RSA PRIVATE KEY-----

試過:

vault get /mysecret.key | sed -n '/^password/,$p'

password    -----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
-----END RSA PRIVATE KEY-----

如何使用 grep/awk/sed 來獲得預期的輸出?

通過您顯示的嘗試,請嘗試以下代碼。

your_API_command | 
awk -v RS= 'match($0,/-+BEGIN.*END RSA PRIVATE KEY-+/){print substr($0,RSTART,RLENGTH)}'

解釋:簡單的解釋是,運行您的 API 命令並將其輸出作為標准輸入發送到awk命令。 在使用 nullify RS 然后使用match函數匹配從- (1次或多次出現)后跟BEGIN直到字符串END RSA PRIVATE KEY后跟 1 次或多次出現-的字符串。

第二種解決方案:這里對第一種解決方案進行了一點調整,用 GNU awk編寫和測試。

your_API_command | awk -v RS='-+BEGIN.*END RSA PRIVATE KEY-+' 'RT{print RT}' 

你可以使用這個sed

vault get /mysecret.key | sed -n '/^password[[:blank:]]*/,$ {s///; p;}'

-----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
-----END RSA PRIVATE KEY-----

命令詳情:

  • -n :禁用正常打印
  • /^password[[:blank:]]*/,$ :模式匹配從password開始,后跟 0 或空格直到文件結尾
  • {s///; p;} {s///; p;} :對於匹配塊,通過從輸出中刪除password后跟 0+ 空格並使用p進行替換,只需打印即可。
$ vault get /mysecret.key | awk 'sub(/^password[[:space:]]*/,""){f=1} f'
-----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
-----END RSA PRIVATE KEY-----

這可能對您有用(GNU sed):

sed -z 's/.*\npassword\s*//' file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM