我正在尝试使用 shell 脚本设置 vagrant box,在其中存储key
文件cert
。任何证书或密钥文件的正常格式如下
-----BEGIN CERTIFICATE-----
MIIDzzCCAregAwIBAgIJAP384f0KeRndMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV
....
0+ZQ+Yxjzs69VHdPJbzu3cxjNQ==
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC6qoE3hNniDqD7
....
wr5wa+bGBgNzIBLS5j9F9Kul
-----END PRIVATE KEY-----
然而,当我检查 vagrant box 时它看起来如下所示。
-----BEGIN CERTIFICATE----- MIIDzzCCAregAwIB ..... 69VHdPJbzu3cxjNQ== -----END CERTIFICATE-----
-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhki .... OB7jnwaqq wr5wa+bGBgNzIBLS5j9F9Kul -----END PRIVATE KEY-----
(基本上,所有内容都在一行中)
由于 Apache2 在日志中出现错误。现在我想将这些密钥转换为正确的格式。我尝试了以下方法
cat server.crt | tr " " "\n"
cat server.crt | tr "\ /" " "
但没有帮助。
-----BEGIN
CERTIFICATE-----
MIIDzzCCAregAwIBAgIJAP384f0KeRndMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV
0+ZQ+Yxjzs69VHdPJbzu3cxjNQ==
-----END
CERTIFICATE-----
这是我通过命令得到的结果sed -i 's/ /\n/g' *.crt
。END 之后,由于空格字符,它会转到下一行。这里的目标是保持第一行和最后一行不变,并格式化它们之间的内容。
答案1
你想要sed -i 's/ /\n/g' *.crt
(假设你有 GNU sed)
但你解决根本原因了吗?如何文件损坏了吗?
答案2
你应该使用tr '\ ' '\n'
例子:
[root@localhost ~]# uname -a
Linux localhost 2.6.32-504.16.2.el6.x86_64 #1 SMP Tue Mar 10 17:01:00 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# uname -a | tr '\ ' '\n'
Linux
localhost
2.6.32-504.16.2.el6.x86_64
#1
SMP
Tue
Mar
10
17:01:00
EDT
2015
x86_64
x86_64
x86_64
GNU/Linux