我在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": "clinetmail@asdasd3435.iam.gserviceaccount.com",
"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": "clinetmail@asdasd3435.iam.gserviceaccount.com",
"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)
3条答案
按热度按时间mbzjlibv1#
由于您要处理JSON,我建议使用jq之类的工具,它提供了
--compact-output
选项,并且能够使用@base64
编码为Base64至单行输出
至Base64单行输出
以Base64单行输出,并用bash解码
注意要删除
""
的--raw-output
。上述行的局部shell示例:
t3psigkw2#
我不确定是否理解
base64
的用法,但简单的tr
应该可以使用,例如:或者像William Pursell在评论中指出的那样,不要用引号括住
${var1}
,也可以去掉od
调用:或者,如果您希望保留所有多余白色,则可以在传递到
tr
之前将${var1}
括在双引号中,例如:7uhlpewt3#
作为一个快速的过程,您真的应该能够通过
bash
中的内置参数扩展来实现这一点。最简单的:
假设您还想用更复杂的模式挤出多余的空格,您可能会尝试使用正则表达式......这是行不通的,因为参数解析实际上使用的是w globbing,而正则表达式 * 本身 *......但请尝试
shopt
for extended globbing -编辑
有空白:这会将
-----BEGIN PRIVATE KEY-----
更改为-----BEGINPRIVATEKEY-----
,我刚刚错过了它。由于您的 * 数据 * 中似乎没有嵌入空格(这是我注意到的),您可以删除它们前面的换行符的 * 要求 *,并删除所有空格以使其更加紧凑。
同样,这会将
-----BEGIN PRIVATE KEY-----
更改为-----BEGINPRIVATEKEY-----
所以......在这种情况下,没有嵌入空格,您可以通过使用POSIX字符类删除所有空格(如顶部所示),在完全不扩展globbing的情况下获得最佳结果。:)