我在shell中有以下變數
{
"type": "service_account",
"project_id": "projectid234",
"private_key_id": "aasdadsxzce5",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "1234242342341",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"
}
如下所示:
export var1='{
"type": "service_account",
"project_id": "projectid234",
"private_key_id": "aasdadsxzce5",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "1234242342341",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"
}'
現在我想將它轉換為單行,我該怎么辦?我嘗試了各種解決方案,但沒有奏效。例如,我使用了下面找到的代碼,但在轉換為 base64 并對其進行解碼后,它只回傳第一行。你介意幫助我嗎?
$((echo $var1 | tr -d '\n') | base64)
uj5u.com熱心網友回復:
由于您正在處理 JSON,我建議您使用類似的工具jq,它為我們提供了--compact-output選項,并且能夠使用 Base64 編碼@base64
到單行輸出
jq --compact-output '' <<< "$test"
轉Base64單線輸出
jq --compact-output '@base64' <<< "$test"
轉Base64單行輸出,用bash解碼
jq --compact-output --raw-output '@base64' <<< "$test" | base64 --decode
注意--raw-output洗掉""'s 。
上述行的本地 shell 示例:
$ test='{
"type": "service_account",
"project_id": "projectid234",
"private_key_id": "aasdadsxzce5",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "1234242342341",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"
}'
$
$ jq --compact-output '' <<< "$test"
{"type":"service_account","project_id":"projectid234","private_key_id":"aasdadsxzce5","private_key":"-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n","client_email":"[email protected]","client_id":"1234242342341","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"}
$
$
$ jq --compact-output '@base64' <<< "$test"
"eyJ0eXBlIjoic2VydmljZV9hY2NvdW50IiwicHJvamVjdF9pZCI6InByb2plY3RpZDIzNCIsInByaXZhdGVfa2V5X2lkIjoiYWFzZGFkc3h6Y2U1IiwicHJpdmF0ZV9rZXkiOiItLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRQ2lXakE1K3hGNmdzR0Ncbk9rbklMOURPQ1FwVjJMUlhZUEVLbDUrbVh1TjQ1dndxaDZRdkc0bHcvSGk3RUpodEFuK0ZReTcreU9RWXJ3M2xcblEyQ3B4RG90VCtQVDJPdVE2TFZiYy9GK1NibFBsckszQis4YUVNbzU3UForZ253TWNRNytvZlBuekM2MzV1VVBcbnBPRzBpZE1US1xuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLVxuIiwiY2xpZW50X2VtYWlsIjoiY2xpbmV0bWFpbEBhc2Rhc2QzNDM1LmlhbS5nc2VydmljZWFjY291bnQuY29tIiwiY2xpZW50X2lkIjoiMTIzNDI0MjM0MjM0MSIsImF1dGhfdXJpIjoiaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL28vb2F1dGgyL2F1dGgiLCJ0b2tlbl91cmkiOiJodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS90b2tlbiIsImF1dGhfcHJvdmlkZXJfeDUwOV9jZXJ0X3VybCI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92MS9jZXJ0cyIsImNsaWVudF94NTA5X2NlcnRfdXJsIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vcm9ib3QvdjEvbWV0YWRhdGEveDUwOS9hc3NhZGphc2hkLmlhbS5nc2VydmljZWFjY291bnQuY29tIn0="
$
$
$ jq --compact-output --raw-output '@base64' <<< "$test" | base64 --decode
{"type":"service_account","project_id":"projectid234","private_key_id":"aasdadsxzce5","private_key":"-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n","client_email":"[email protected]","client_id":"1234242342341","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"}%
$
$
uj5u.com熱心網友回復:
不確定我是否理解使用,base64但一個簡單的tr應該可以作業,例如:
$ var2=$(echo ${var1} | tr -d '\n') # ${var1} is not wrapped in double quotes so repetitive white space is squeezed to single spaces
$ echo "${var2}"
{ "type": "service_account", "project_id": "projectid234", "private_key_id": "aasdadsxzce5", "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n", "client_email": "[email protected]", "client_id": "1234242342341", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com" }
或者正如 William Pursell 在評論中指出的那樣,不要${var1}用引號括起來,您也可以取消od呼叫:
$ var2=$(echo ${var1}) # the unquoted ${var1} also removes linefeeds so no need for tr
$ echo "${var2}"
{ "type": "service_account", "project_id": "projectid234", "private_key_id": "aasdadsxzce5", "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n", "client_email": "[email protected]", "client_id": "1234242342341", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com" }
或者,如果您希望保留所有額外的空白,您可以${var1}在傳遞給之前用雙引號括起來tr,例如:
$ var2=$(echo "${var1}" | tr -d '\n') # ${var1} is wrapped in double quotes to maintain all white space
$ echo "${var2}"
{ "type": "service_account", "project_id": "projectid234", "private_key_id": "aasdadsxzce5", "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n", "client_email": "[email protected]", "client_id": "1234242342341", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com" }
uj5u.com熱心網友回復:
就像快速通過一樣,您真的應該能夠通過bash.
最簡單的:
$: echo "$var1" # this should present it exactly as you saved it
{
"type": "service_account",
"project_id": "projectid234",
"private_key_id": "aasdadsxzce5",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "1234242342341",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"
}
$: echo "${var1//$'\n'/}" # this should strip out the newlines
{ "type": "service_account", "project_id": "projectid234", "private_key_id": "aasdadsxzce5", "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n", "client_email": "[email protected]", "client_id": "1234242342341", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com" }
假設您還想用更復雜的模式擠出無關的空白,您可能會想使用正則運算式......這是行不通的,因為引數決議實際上使用了 w globbing,但正則運算式本身......但嘗試shopt對于擴展通配符 -
$: shopt -s extglob # c.f. https://mywiki.wooledge.org/glob#extglob
$: echo "${var1//$'\n' ( )/}" # remove a newline followed by one or more spaces
{"type": "service_account","project_id": "projectid234","private_key_id": "aasdadsxzce5","private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n","client_email": "[email protected]","client_id": "1234242342341","auth_uri": "https://accounts.google.com/o/oauth2/auth","token_uri": "https://oauth2.googleapis.com/token","auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs","client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"}
編輯
有空格:這更改-----BEGIN PRIVATE KEY-----為-----BEGINPRIVATEKEY-----,我只是錯過了它。
由于您的資料中似乎沒有嵌入空格(我注意到了),您可以取消在它們前面換行的要求,并洗掉所有空格以進一步壓縮它。
$: echo "${var1//*($'\n') ( )/}"
{"type":"service_account","project_id":"projectid234","private_key_id":"aasdadsxzce5","private_key":"-----BEGINPRIVATEKEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----ENDPRIVATEKEY-----\n","client_email":"[email protected]","client_id":"1234242342341","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"}
同樣,這更改-----BEGIN PRIVATE KEY-----為-----BEGINPRIVATEKEY-----
所以......在這種情況下,沒有嵌入的空格,您可以通過使用 POSIX 字符類來洗掉所有空格,就像在頂部一樣,完全不需要擴展 globbing 就可以獲得最佳結果。:)
$: echo "${var1//[[:space:]]/}" # // means global replacement
{"type":"service_account","project_id":"projectid234","private_key_id":"aasdadsxzce5","private_key":"-----BEGINPRIVATEKEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5 xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5 mXuN45vwqh6QvG4lw/Hi7EJhtAn FQy7 yOQYrw3l\nQ2CpxDotT PT2OuQ6LVbc/F SblPlrK3B 8aEMo57PZ gnwMcQ7 ofPnzC635uUP\npOG0idMTK\n-----ENDPRIVATEKEY-----\n","client_email":"[email protected]","client_id":"1234242342341","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/512828.html
標籤:重击壳jq
