sed:更改 .yml 文件中环境属性的值

2024-05-03

我有一个 .yml 文件,用于配置应用程序的环境属性,如下所示:

env1:
  :prop1: "value1"
  :prop2: "value2"
        ...
  :propn: "valuen"

env2:
  :prop1: "value1"
  :prop2: "value2"
  :prop3: "value3"
        ...
  :propn: "valuen"

    ...

envn:
  :prop1: "value1"
  :prop2: "value2"
        ...
  :propn: "valuen"

我想生成一个具有以下界面的 bash 脚本:

$ change_env.sh <environment> <property> <new value> <file.yml>

Example:

$ change_env.sh env2 prop3 "this value was changed" file.yml

输出将是:

env1:
  :prop1: "value1"
  :prop2: "value2"
        ...
  :propn: "valuen"

env2:
  :prop1: "value1"
  :prop2: "value2"
  :prop3: "this value was changed"
        ...
  :propn: "valuen"

    ...

envn:
  :prop1: "value1"
  :prop2: "value2"
        ...
  :propn: "valuen"

我找到了这篇文章,但我无法让它适合我的情况。替换 XML 元素的值? sed正则表达式? https://stackoverflow.com/questions/1348124/replace-an-xml-elements-value-sed-regular-expression

我也尝试过这个:(它失败了,因为改变了所有属性)

sed 's/\(:pro3:\).*/\1 "new value"/'

提前致谢! ——洛伦索.


(非常好的第一篇文章!)

Try this

cat change_env.sh

#!/bin/bash
# spec : change_env.sh <environment> <property> <new value> <file.yml>

case ${#} in [!4] ) 
    echo "usage: change_env.sh <environment> <property> <new value> <file.yml>" 1>&2
    exit 1 
   ;; 
esac

env="$1" prop="$2" new="$3" file="$4"
bakFile="${file}".bak
mv "$file" "$bakFile"
sed '/^'"${env}"'/,/^[   ]*$/{  # [ spaceChar tabChar ]
        /'"${prop}"'/s/\('"${prop}"'\)\(.*$\)/\1'"${new}"'/
    }' "$bakFile" > "$file"

edit

请注意,如果您希望输入的值中包含空格,您需要修改脚本以引用所有变量(“$1”、“$2”...)。 (我现在已经这样做了,因为这是 shell 脚本的最佳实践)。

The /env/,/^[{space,tab}]*$/是 sed 的范围地址。它读取包含您的环境设置的文本块。我假设您的示例输入是正确的,并且每个环境都由空行分隔。嗯...这将包括文件中的最后一个。

** 编辑**

感谢@posdef 指出了这个答案的一些问题。更新代码以解决特定情况。

即使在修复之后,我确实注意到给定一个像这样的输入

   change_env.sh env2 prop2 "new value" file.yml

相关输出是

     :prop2new value

因此,无需额外硬编码:和空格字符到替换中,这意味着您需要非常详细地调用<property>值和<new value> , i.e.

   change_env.sh env2 ":prop2: " "\"new value\"" file.yml
   # note extra cruft-^^-----^^^--^^---------^^--------------

相关输出

env2:
  :prop1: "value1"
  :prop2: "new value"
  :prop3: "value3"
    ...
  :propn: "valuen"

IHTH

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sed:更改 .yml 文件中环境属性的值 的相关文章

  • 使用解析将 ** 运算符更改为幂函数?

    我的要求是将 运算符更改为幂函数 例如 1 Input B 2 Output power B 2 2 B 2 T 2 X Output power B 2 我写了下面的正则表达式来解决这个问题 rx r a zA Z0 9 a zA Z0
  • JavaScript 中的正则表达式用于验证十进制数字

    我想要 JavaScript 中的正则表达式来验证十进制数字 它最多只允许两位小数 例如 它应该允许10 89但不是10 899 它还应该只允许一个句点 例如 它应该允许10 89但不是10 8 9 尝试使用以下表达式 d d 0 2 如果
  • awk 脚本中出现“BEGIN 块必须有操作部分”错误

    这是我的代码 bin sh filename usr bin find name INSTANCE log echo filename is filename awk BEGIN print Processing file filename
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • 在Python中检测re(regexp)对象

    我想知道什么是正确的 pythonic 向后和向前兼容的方法如何检查对象是否已编译re object isinstance方法不能轻易使用 而生成的对象声称是 sre SRE Pattern object gt gt gt import r
  • 正则表达式 '?' 的类似物(前一项可选)在T-SQL中像什么?

    我想知道 是否可以翻译包含 的正则表达式 前面的项目可选 在 T SQL LIKE 模式中 DB 端无需任何操作 例如 31 4 我可以将其分成几个子句 但如果正则表达式包含很多 这不太方便 LIKE不使用正则表达式 并且它使用的模式语言没
  • 使用先前的反向引用作为命名捕获组的名称

    有没有办法使用对先前捕获组的反向引用作为捕获组的名称命名捕获组 这可能不可能 如果不可能 那么这就是一个有效的答案 下列 data description some description preg match data matches p
  • 获取最新远程提交的 SHA1 [重复]

    这个问题在这里已经有答案了 可能的重复 git bash 如何检查是否有新的提交可用 https stackoverflow com questions 6006759 git bash how to check if theres a n
  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • 如何制作 Bash 脚本来查找项目中未使用的图像?

    如何制作一个 Bash shell 脚本 它可以识别所有 jpg gif 和 png 文件 然后识别文件夹中任何文本文件中哪些文件未通过 url href 或 src 链接 这就是我开始的 但我最终得到了与我想要的相反的结果 我不想知道引用
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • 在 byobu 选项卡中启动命令的脚本

    我已经使用 screen 来启动服务器进程 以便稍后我可以在需要时附加并再次分离以继续执行其他操作 它工作得很好 但我最近发现了 byobu 我真的很喜欢它 我想使用相同类型的脚本来运行服务器 但我想将其附加到 byobu 选项卡 而不是屏
  • 使用 Boost::Spirit 解析 time_period 表达式

    我需要使用 Boost Spirit 解析以下 EBNF 表达式 period date part time part date part time part time part hours minutes seconds date par
  • Perl 非贪婪

    我遇到非贪婪正则表达式 regex 的问题 我已经看到有关于非贪婪正则表达式的问题 但它们没有回答我的问题 Problem 我正在尝试匹配 lol 锚点的 href Note 我知道这可以通过 Perl HTML 解析模块来完成 我的问题是
  • .htaccess 如果 URL 错误,请执行某些操作

    我正在做我的个人CMS http en wikipedia org wiki Content management system 我想在其中使用很酷 友好 的 URL 这是我的 htaccess 文件代码 RewriteEngine on
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • GitHub Actions:如何将 toJSON() 结果传递给 shell 命令

    因此 我正在与 Github Actions 合作进行端到端测试 我正在查看的设置是让一项作业检索要测试的 url 列表 而我的第二项作业使用该列表创建一个矩阵并测试所有这些 我的问题是 当我实际运行测试脚本时 必须从命令行完成 因为我使用
  • 通过 htaccess 将 PNG 解析为 PHP 仅适用于本地服务器,但不适用于网络服务器

    我用 PHP 创建了一个动态 PNG 图片 为了使用 PNG 扩展名 我创建了一个包含以下内容的 htaccess 文件 AddType application x httpd php png 在我的本地 XAMPP 服务器上 一切工作正常

随机推荐

  • 隐藏控制台并执行 python 脚本

    我正在尝试使用 pyinstaller 在 Windows 10 上使用 pyqt5 模块编译在 python 3 中构建的 python 脚本 该脚本在运行时隐藏窗口 为了编译我的脚本 我执行了以下命令 pyinstaller onefi
  • 防止左浮动 div 转到新行

    我有 4 个 div 设置为向左浮动 但最后的 div 不断在较小的屏幕上换行两个新行 这真的很烦我 我希望它们随屏幕尺寸缩放 以便它们始终保持在同一行上屏幕尺寸 并且我尝试不使用桌子 这非常诱人 因为他们对此非常可靠 我想知道如何解决这个
  • R 对等证书无法使用给定的 CA 证书进行身份验证,Windows

    当尝试使用导入谷歌工作表时gs read 函数 我收到以下错误消息 在curl curl fetch memory url handle handle 中出错 对等 无法使用给定的 CA 证书对证书进行身份验证 我正在关注这个vignett
  • Julia 1.6.2 未出现在 Jupyter 笔记本中

    我已经根据这个网站安装了 julia 1 6 2 jupyter notebook 和 anaconda 3 https datatofish com add julia to jupyter https datatofish com ad
  • 如何检测图像中对象的实例?

    我有一张包含几个特定对象的图像 我想检测这些物体在该图像中的位置 为此 我有一些模型图像 其中包含我想要检测的对象 这些图像在我想要检测的对象实例周围得到了很好的裁剪 这是一个例子 在这张大图里 我想检测此模型图像中表示的对象 自从你最初发
  • 使用 Swift 获取 UITableViewCell 中 UITextField 的 indexPath

    因此 我正在构建一个详细视图控制器应用程序 它显示一个包含两部分单元格的表格 标签和文本字段 我正在尝试检索文本字段值并将其添加到数组中 我尝试使用 textField superview superview 技术 但没有成功 func t
  • Android - GC 滞后于列表视图滚动“更大”的图像

    在列表视图中 我想在列表条目上绘制一个图像 这 20 张图像必须缩放以填充垂直模式的宽度 手机分辨率为 480 x 800 像素 SGS2 图像分辨率为 400x400 大小约为 100KB 我已将图像放在可绘制文件夹中 当我滚动列表时 它
  • 如何搜索 Google 电子表格?

    我正在进行一些详尽的搜索 需要确定电子表格中是否已存在新域 URL 然而 所有 Spreadsheet 对象都没有搜索功能 即大多数 Document 对象中的 findText 功能 我觉得我错过了一些重要的事情 我缺少什么 查找文本函数
  • 在开始 Web 开发项目之前,您如何估计要花费的时间? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当你告诉你的客户或经理这可以在10天内完成 但你花了20天才得到一个点 甚至还没有部署到现场时 感觉真的很糟糕 任何经验都可以与我分享您是如何估
  • WPF 绑定默认模式

    在我的一个应用程序中 我有这样的代码
  • RestClient发送IFormFile

    我从我的控制器收到一个文件 public async Task
  • MySQL 的 read_sql() 非常慢

    我将 MySQL 与 pandas 和 sqlalchemy 一起使用 然而 它的速度非常慢 对于一个包含 1100 万行的表 一个简单的查询需要 11 分钟以上才能完成 哪些行动可以改善这种表现 提到的表没有主键 并且仅由一列索引 fro
  • 如何在 Xamarin.Forms.Maps 中使用深色模式 Google 地图?

    我正在尝试使用 Xamarin Forms Maps nuget 包在我的 Xamarin Forms 应用程序中使用深色模式 Google 地图 我已经成功地在 iOS 地图上使用了 OnElementChanged if e NewEl
  • 如何在 Dart 中向枚举添加方法或值?

    在Java中 当您定义枚举时 您可以执行类似于以下的操作 即向枚举添加成员enum 这在 Dart 中可能吗 enum Foo one 1 two 2 final num value Foo this value 从 Dart 2 6 开始
  • POSIX:FreeBSD 与 Linux 中的管道系统调用

    在 Linux 2 6 35 22 generic 中 man pipe指出 pipeline 创建一个管道 一个可用于进程间通信的单向数据通道 在 FreeBSD 6 3 RELEASE p5 中 man pipe指出 pipeline
  • PostgreSQL 选择结果大小

    我在 PostgreSQL 数据库中有一个表 并从该表中进行一些限制的选择 并且我想知道该选择有多少磁盘空间 我知道有一个postgres函数pg total relation size这给了我数据库中某个表的大小 但是如何找到 子表 的大
  • 将新形状传递给“np.reshape”

    Within numpy ndarray reshape https docs scipy org doc numpy reference generated numpy ndarray reshape html the shape参数是一
  • jquery datetimepicker 24小时时间格式

    我正在使用 datetimepicker js 来选择 jquery 的日期和时间 如何将时间格式从 12 小时制更改为 24 小时制 我得到了答案 您只需要在 24 小时制的格式中提及 HH mm 或在 12 小时制的格式中提及 hh m
  • 数据表到 JSON [重复]

    这个问题在这里已经有答案了 我最近需要将数据表序列化为 JSON 我现在仍然使用 Net 2 0 因此我无法在 Net 3 5 中使用 JSON 序列化器 我想这肯定是以前做过的 所以我上网查了一下found http www codepr
  • sed:更改 .yml 文件中环境属性的值

    我有一个 yml 文件 用于配置应用程序的环境属性 如下所示 env1 prop1 value1 prop2 value2 propn valuen env2 prop1 value1 prop2 value2 prop3 value3 p