regex - sed 替换私钥中的转义字符

标签 regex bash sed

我需要将 config.yaml 文件中的字符串 $ssh_private_key_contents 替换为实际的 ssh 私钥内容( key 的每一行以\n 分隔)。

$ssh_private_key_contents="-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAvx9xuVc8eq2ug7OgUKQHO2YNgw2qxPN6HyAVRtCb6E8rolnI\nuSnE/CxuNMk1E4+oD+qkL772FXgL656DvKTnXpz3pySFj/KppNmm3chmMQGcXqyV\nQcYyXy/vpKgh4gBYmEi5IM9ksDtAby2OPD089w3gOVFhgvg5307pW4o5ccbmBUub\nB1QNvWYiCB7Po8FLVHq+a5f2bg1ui1IY10F93ej555Bzg/woE9jqPGKBL9iWV0M4\nulUVW42Q4V0lJiyFo724KD30N6zymMQ4SMWExW3BmJRWGtyvWY8hTxHKiuToyywF\nga5AxWaApg/+0T1CKBgypfviOacaKg5PYt050wIDAQABAoIBAH0L1r18HT7q6haT\nbR215GFxqP+I7qVD5C//LsyRaqB5RERJ2DGF6bNQYp640rhEsqIPVHNEzv9G9w2n\nPewsPJFDxCkglR6Ul3gbS7kqB+qicivjYRiS05xB4dpqgxi6Pz0Lv8x+xRMlAUh8\nluZE7uF5u63k2Bb3z+2SVM4mxuTwKpqPmcex/kuHDUdEq0FgHLpBFxXpUwoPjb1J\nCH5RwpU/VVSaEWws2UauXFPYNUJVY0aGPm4id2k3gBWTpvV8ATjw33cgvx13hD+8\nT98tMzAw6Tv6N6gIhrrmWNAA42CcfMxgrfVM6OxhaNkMk7/FaodEBNTMZnwMuvQt\nOyimXbkCgYEA7Ybh2REvjWuZ3xXOe4ei+SmF5f7+XyGwZBbmVWTEzi1Wozhf16Wx\nFkGk5JcnVn/Pl1rfXPBFyrb7D2joe1SQUVY4CK1gVnO2WgAziOVg3Yq9p6hG0m7O\nXLoMckN4Ekt97x4pXmKrfSDuIYTlM0DELtST5MrMSFaVmxLXDce4708CgYEAzfyq\nY9UIYBIlhkJ3GLMA22MAKDYNjuVTHQqOoZsDCUkqr1r+lvKGYblqr5s70R/FbTjJ\n00wa7KYGCnz6D26qMD/TZ319ySTyY4M64GIswFHt/J6H8RgTRgXyv3AI0Yv41T1t\nxQzhO9cuCkbuw99ejDbr/VL14niXysbOkLUDjD0CgYAdvqljtHo+/H2NaT6tS4QG\nLcP91Fvob+CV+CQqB2953kWeNP4TlEVD4z6R/bfIZkMJ0jBshA5JX3a7LEkIwMM9\n3E0yEPwid2UbijDp8Meblrc/Wpxb19Jx3D6YxIgxylBf9Gf70OFmzwvjGLBXJcIr\nlyVaHmdMm8MqY0aZDCzFkwKBgBmPNIVWtcdV+RoDvUtvSrfuPOLAckY85mdAHBqp\nZWMNlSJVJCoOxeXyX+6SUIXOb2zyEvkJBH5Ay5cZkt2/WZbLFKxOwgDneLwoWHHn\nPK5QfDtQYIXl+t5BdrGScUWvHJ05FhnRU1FdjfTwgEgFu3Gijv3MAX6sgAlFSfRi\nwaHxAoGAfLSIH2rUBrVMjFkPsQY1Wg/8lAK0WqM5md19w3aSQREQw/eSAUgwNtw7\nUlDxeC8EfEM65BgqO1Oo3H8vabMRqd55L3Cb/Nb/tYKUG90DeBTOO8CC0RPtD2CS\nqNUWH8qPzaXEJ74ADUupv5ukkpA6zWVg9e4VNDG0cpwZmRBcSIY=\n-----END RSA PRIVATE KEY-----\n"

sed -i 's/$ssh_private_key_contents/'"$ssh_private_key_contents"'/g' config.yaml

我遇到了这个错误:

sed: -e expression #1, char 81: unknown option to `s'

我尝试转义/但不断收到更多错误。实际配置文件有不同种类的此类字符串需要填充。

最佳答案

正如ymonad在评论中所说,假设SSH私钥中没有出现%,可以使用:

sed -i "s%\$ssh_private_key%$ssh_private_key%" config.yaml

或者,选择未出现在 $ssh_private_key 内容中的任何其他字符。

此外,请考虑您是要转义输出中的 \ 还是要让 \n 在输出中变成真正的换行符。

关于regex - sed 替换私钥中的转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876631/

相关文章:

c# - 带条件重复的正则表达式

python - Scrapy:如何使用正则表达式跟踪页面上的多个链接

bash - 通过 SSH 的 sbt (Scala) 结果找不到命令,但如果我自己这样做就可以工作

sed - 在模式之间每四行添加两行 - SED

linux - 如何删除字符串输出的前两个单词

regex - 取出strsplit中的元素并放入dataFrame

apache - Bash 脚本 : Wait for apache2 graceful-stop

linux - 从 Apache/Nginx Access.log 检索用户代理

bash - sed:使用另一个文件的内容修改一个文件

regex - 在 Vim 中排除与 ‘\%’ 的匹配?