我需要在用空格替换所有新行字符后恢复RFC4716 SSH2公钥结构(密钥内容作为参数传递给程序并在bash中作为$ @检索)。我想用正则表达式和sed程序来做。有没有人遇到过解决方案?
示例:
传递给程序的输入字符串(一个字符串将所有新行替换为空格):
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "1024-bit RSA, converted from OpenSSH by me@example.com" x-command: /home/me/bin/lock-in-guest.sh AAAAB3NzaC1y(... some spaces are inserted instead of LF)9zcE= ---- END SSH2 PUBLIC KEY ----
输出字符串:
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "1024-bit RSA, converted from OpenSSH by me@example.com"
x-command: /home/me/bin/lock-in-guest.sh
AAAAB3NzaC1yc2EAAAABIwAAAIEA1on8gxCGJJWSRT4uOrR13mUaUk0hRf4RzxSZ1zRb
YYFw8pfGesIFoEuVth4HKyF8k1y4mRUnYHP1XNMNMJl1JcEArC2asV8sHf6zSPVffozZ
5TT4SfsUu/iKy9lUcCfXzwre4WWZSXXcPff+EHtWshahu3WzBdnGxm5Xoi89zcE=
---- END SSH2 PUBLIC KEY ----
答案 0 :(得分:1)
这个命令能做你想做的吗?
sed -e 's/Comment:/\n&/' -e 's/x-command: [^ ]* /\n&\n/' -e 's/---- END/\n&/' | sed '4 { s/ /\n/g }'
第一个sed重新创建原始行,但将公钥作为一行留空。第二个sed用换行符替换公钥中的空格(第四行)。