bash - 使用 sed 和 env 变量在 bash 脚本中使用选项卡在特定行插入新行
问题描述
我有一部分 json 如下所示:
{
"openstack": {
"admin": {
"username": "admin",
"password": "password",
"tenant_name": "test"
},
和这样定义的三个环境变量
auth_url=VALUE1
region_name=VALUE3
endpoint_type=VALUE2
我想在第 2 行之后的输入文件中插入 3 行,以便输出为
{
"openstack": {
"auth_url": VALUE1,
"region_name": VALUE2,
"endpoint_type": VALUE3,
"admin": {
"username": "admin",
"password": "password",
"tenant_name": "test"
},
如何使用 SED 完成,我在下面尝试过
sed -e '3i/\t"auth_url":$auth_url,' -i account_2.json
但它不仅/
在第 3 行添加了额外的内容,而且实际上也没有替换$auth_url
为环境变量。
解决方案
您正在滥用该i
命令。你必须在它后面加上反斜杠,而不是斜杠。
此外,该变量没有展开,因为它是在单引号中。试着把它放在双引号中,像这样
sed "3i\ \"auth_url\":$AUTH," yourfile
我读过i
nsert 命令希望反斜杠后面的任何内容都在换行符上,但这里不是这种情况,我们将所有内容都放在一行上。我猜那是允许它的 GNU sed。
要插入三行,你可以使用这个
sed "3i\ \"auth_url\":$SHELL\n \"auth_url\":$SHELL\n \"auth_url\":$SHELL" os
它也适用于逗号,因为它们没有特殊含义:
sed "3i\ \"auth_url\":$SHELL,\n \"auth_url\":$SHELL,\n \"auth_url\":$SHELL,"
推荐阅读
- python - 如果用户输入“0 > toyDiscount >= 100”,我如何显示消息
- javascript - Spring boot - ModelAndView 不调用另一个页面
- c# - 首次使用 protobuf-net c# 访问 gRPC 端点时性能缓慢
- python - 如果调用者忘记在上下文管理器方法上使用 with-block,如何引发异常
- javascript - 使用类语法时,子类不是 JavaScript 中父类的实例
- python - 为什么FastAPI从路由函数返回时会执行两次Pydantic构造函数?
- list - 如何将字典中的列表列表转换为数据框?
- c# - 根据另一个更新 DataGridComboBoxColumn 的 itemsource
- utf-8 - 阿拉伯字符转ABCD字符
- c++ - Cpp 目标文件的反汇编:初始化序列中发生了什么?