使用 awk sed 解析更新 puppet 文件

2024-01-12

我有一个包含多行代码的木偶文件,其中有一个部分如下所示:

$defaultrepo=myrepo
$defaultbranch=mybranch

gitmod::pullstuff {'othergitcode':
      gitcommit => "b54123be540adrwer3b65872384e0101c5f94c926b81",
      gitorg      => "${defaultrepo}",
      branch    => "${defaultbranch}",
    }

gitmod::pullstuff {'mygitcode':
      gitcommit => "b54123be540adrfer3b65872384e0101c5f94c926b81",
      gitorg      => 'awesomerepo',
      branch    => "master",
    }

它可以具有任意数量的块,这些块看起来类似于上面列出的两个代码块。

我正在寻找一种方法来解析文件并将值作为变量提取,然后使用它们来获取最新的 git 提交并更新值。我正在考虑在 bash 脚本中使用 awk 和 sed,以便它可以执行类似的操作。 例如

values could be: $gitrepo=mygitcode $gitorg=awesomerepo $gitbranch=master

for i in $(awk "regexto pull out each block from  gitmod::pullstuff \{'whatever': through         to the ending \}" puppetfile.pp);
do
    $gitrepo="sed/awk to pullout git repo"
    $gitorg="sed/awk to pullout git org"
    $gitbranch="sed/awk to pullout git branch"
    $newcommit=git ls-remote https://github.com/$gitorg/$gitrepo.git refs/heads/$gitbranch
    sed -i "replace commit with $newcommit"
done

你可以尝试这样的事情:

awk -f m.awk puppetfile.pp  puppetfile.pp

where m.awk is:

NR==FNR {
    if (/^gitmod/) {
        gitrepo=getRepo()
        getline
        getline
        gitorg=getOrg()
        getline
        branch=getBranch()
        com[++i]=getNewCommit()
    }
    else if (/^\$[[:alnum:]]*=/) {
        vn=getVarName()
        val=getVarValue()
        var[vn]=val
    }
    next
}

/^gitmod/ {
    print
    getline
    sub(/".*"/,"\""com[++j]"\"")
}
{ print }

function getVarValue(a) {
    match($0,/=([[:alnum:]]+)[[:blank:]]*/,a)
    return a[1]
}

function getVarName(a) {
    match($0,/\$([[:alnum:]]+)=/,a)
    return "${"a[1]"}"
}

function getNewCommit(cmd,var) {
    cmd="ls-remote https://github.com/"gitorg"/"gitrepo".git refs/heads/"branch
    cmd |& getline var
    return var
}

function getBranch(a,br) {
    match($0,/"(.*)"/,a)
    br=a[1]
    if (br in var) br=var[br]
    return br
}

function getOrg(a,org) {
    match($0,/"(.*)"/,a)
    org=a[1]
    if (org in var) org=var[org]
    return org
}
function getRepo(a,rep) {
    match($0,/\{"(.*)":/,a)
    rep=a[1]
    if (rep in var) rep=var[rep]
    return rep
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 awk sed 解析更新 puppet 文件 的相关文章

  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 在 Bash 中获取 Mac OS X 上正在运行的应用程序列表? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 是否可以使用 Bash 获取正在运行的应用程序列表 我不是在谈论进程 而是在 Dock 中的应用程序 以及菜单栏中的应用程序也很好 osascript
  • Git 克隆致命

    我在执行 git clone 时遇到错误 fatal pack has bad object at offset 824775943 inflate returned 1 fatal index pack failed 它仅适用于 Wind
  • 签出现有的远程分支

    我见过不同的方法来检查现有的远程分支 假设我的朋友推送了新分支 bigbug 并且我想签出并将我的本地工作副本切换到该分支 我有以下选项 1 git checkout b bigbug origin bigbug 2 git checkou
  • 大括号语法 ${var%.*} 是什么意思?

    我正在查看一些旧代码并遇到了以下语法 extractDir downloadFileName tmp 我发现搜索的唯一信息是指命令列表 但这只是一个变量 这个大括号语法在 bash 中意味着什么 在这种背景下 它是一个参数替换 http w
  • 尽管有 svn 复制,如何 git svn 克隆完整历史记录

    在我的公司 我们即将从 svn 切换到 git 我们使用的 SVN 非常大 没有 svn 布局 并且在每个版本拆分上我们都制作了一个 svn 副本 SVN存储库结构 svnserver company de product xy 主要版本号
  • “git rm --cached”、“git Restore --staged”和“git reset”之间有什么区别

    我遇到了以下三种方法来取消暂存由命令 git add 暂存的文件 git rm cached
  • 从 shell 查找不包含特定注释的 XML 文件

    我想搜索 awk grep sed 几个 XML 文件 pom xml 文件 跳过某些文件夹 而且 第一个条件是它们必须包含标签
  • 如何让 git 和 copSSH 在正确的目录中查找密钥?

    我刚刚安装了 Windows 版 copSSH 当我启动它时 我得到一个目录C copSSH home Nick ssh其中有我的酒吧和私钥 当我通过 Cygwin bash 窗口访问此目录时 使用 ssh 用户 主机 我很高兴地登录了 但
  • Python 无法在 git bash 命令行中工作

    Python 不会在 git bash Windows 中运行 当我在命令行中输入 python 时 它会将我带到一个空行 而不会像在 Powershell 中一样显示它已输入 python 2 7 10 它没有给我错误消息 但 pytho
  • 主存储库和本地存储库在同一台机器上

    我是 Git 新手 我已经在 Linux 服务器中创建了一个主存储库 同一个服务器将由 5 组 每组 3 个用户 使用 我想为每个组创建一个本地存储库 小组成员又应该为每个人创建一个本地存储库 使用内容并将修改提交到小组的本地存储库 我该怎
  • 使用 Subversion 进行部分提交

    鉴于我做的案例两个独立的变化 in one文件 例如 添加了一个新方法并更改了另一个方法 我经常不想提交这两项更改 因为one提交 但作为two独立承诺 在 git 存储库上我会使用互动模式 of git 添加 1 http linux d
  • Eventmachine start_tcp_server 无接受器 - 端口正在使用或需要 root 权限(运行时错误)

    我已经 3 天无法运行本地服务器了 重新启动我的计算机没有帮助 有几次 在反复尝试大约 40 50 次之后 它随机地起作用了 我不明白为什么 我尝试过一次不同的端口并且有效 但从那以后 没有端口有效 每次我尝试运行我的 Rails 服务器时
  • 从 master 更改为新的默认分支 git

    这是一个场景 我们有一个默认的分支 Master 我们以此为基础 创建分支并向上推等等 我们现在创建了一个Develop分支Master并将其设置为默认开发分支 我想知道的是 我现在如何知道我的 git pull 命令是否通过命令行请求默认
  • 如何使用“gem install”命令从私有 GitHub 存储库安装 gem

    如何在本地安装托管在 GitHub 上的私人存储库中的 gem 特别是 我们通过gem install命令而不是在 Bundler 中使用 因为它是一个命令行工具 我尝试这样做 gem install githubname repo s h
  • 如何标记单个文件?或如何下载特定文件? - 胃肠道

    我想向文件添加标签以轻松下载该文件而不是整个分支 如何下载GIT中的特定文件 我不知道有什么方法可以标记特定文件git 对于第二个问题 如何下载特定文件git 仅当您的意思是 同时下载 时 以下内容才有效in a git存储库 这就是我理解
  • EGit(Eclipse git 插件)可以使用 SSH 密钥代替用户名和密码吗?

    我需要提交的 git 中央存储库是使用 SSH 密钥配置的 我的用户名是jmglov 但是当我执行 git 操作时 例如git clone 我使用这个配置 jmglov kitiara cat git config remote origi
  • hg 或 git 中的两个完整目录/项目之间存在差异?

    我继承了一个最初存储在 CVS 中的项目以及所有修订 我做了相当多的编辑 并且我试图比较我在原始目录中所做的所有更改 关于添加的新文件与旧文件 hg git 是否有某种实用程序可以让我进行树差异或类似性质的操作 也就是说 新添加的文件 删除
  • Git 中的合并冲突是由什么构成的?

    git 如何确定特定合并存在冲突以及冲突是什么 我的猜测是这样的 如果正在合并的两个提交有一个共同的父提交 并且如果它们都更改了父提交的 X 行 那就是冲突 让我的理解变得复杂的是 更改 X 行 可能意味着用几行新行替换它 但这仍然显示为一
  • awk 脚本中出现“BEGIN 块必须有操作部分”错误

    这是我的代码 bin sh filename usr bin find name INSTANCE log echo filename is filename awk BEGIN print Processing file filename

随机推荐

  • 连接MySQL数据库很慢,需要n秒

    为什么连接到我的 InnoDB 数据库经常延迟整数秒 一些背景 我有一个非常小的 MySQL 数据库 由一个表 users 150 条记录 和一个表 connections 增长到 150 150 条记录 组成 表和索引加起来不到 5 MB
  • 尝试在一行 if 语句中使用 pass 关键字时出错

    困惑这是否有效 if 5 2 0 print no remainder else pass 但不是这个 print no remainder if 5 2 0 else pass SyntaxError invalid syntax 后者不
  • 在 Android Studio 3.4.1 中继续面临进程意外退出

    更新后Java面临一个问题进程意外退出在创建 Android 版本时 我正在使用Android Studio 3 3 0并将其也更新为3 4 1也可以查看任何更新 但没有任何变化 目前我正在使用 classpath com android
  • Coldfusion jQuery getJSON:获取 WDDX 而不是 JSON

    我正在使用 Brian Rinaldi 的 Coldfusion 函数将 dotnet Webservice 数据集转换为查询结构 然后 每个查询都会以 JSON 形式返回到客户端页面 以便在 jQuery 函数中使用 查询是有效的查询对象
  • 如何确定 DynamoDB 项目是否确实被删除?

    DynamoDB 提供了用于删除项目的 API 在返回的DeleteItemOutcome and DeleteItemResult没有字段或方法来确定是否找到该密钥以及该项目是否确实被删除 查明该项目是否确实存在并已删除的唯一方法是请求该
  • 我可以在 python 中调用 Lambda 表达式中的函数吗

    我有一个包含 if else 条件和 for 循环的函数 我想在 lambda 表达式中编写这个函数 我尝试了多种方法来创建这个 lambda 函数 但我还是做不到 这是我的功能和另一个规则 negation no not never sp
  • BroadcastReceiver 未接收广播

    我正在尝试使用以下扩展代码来广播 toast 消息Activity 但广播没有被其他人接收到Activity 则不显示 toast 有人可以解决我的错误吗 主要活动是发送广播 java import android app Activity
  • Vue:在组件中使用自定义库(pdf.js)

    如何在 Vue 组件中使用供应商库 特别是我想使用 PDF js 我只想为这个特定组件加载它 因为它们是相当大的文件 我正在构建一个需要加载 pdf 的编辑器 所以我将 pdf js 和 pdf worker js 放在 src asset
  • 使用 python 运行 crontab

    Python crontab 脚本似乎不起作用 当我手动运行它时 python home ec2 user code1 py 它工作正常 但当放入 crontab 的 cron txt 文件时 却不起作用 我的 crontab 文件是 ho
  • 控制声音的速度 xcode

    我想知道是否可以减慢 xcode 中的声音 我的意思是我将在 xcode 中的支持文件中添加一些 mp3 文件 并且我将创建能够加快或减慢速度的应用程序 例如使用滑块 有可能吗 如果是 有人可以帮我出点主意吗 谢谢 AVAudioPlaye
  • Firebase - 在互联网离线时上传图像

    Firebase 有很好的选择 即使您处于离线状态 也可以使用其数据库并将数据发送到数据库 然后当连接再次建立时 它会自动将数据发送到数据库 是否也可以使用 Firebase 存储来做到这一点 例如即使互联网关闭也发送图像 然后当互联网再次
  • 如何在我自己的函数中使用给定包的内部函数

    我想使用给定 R 包 例如 httr 的内部函数编写一个函数 而不必将这些方法引用为httr method of httr package in the body我的功能 我不想使用 我尝试改变我的函数的环境 例如 enviroment m
  • 如何下载 Android 版谷歌源代码

    如您所知 有数百个项目的清单https android googlesource com https android googlesource com 我想将它们全部下载到 Windows 机器中 根据谷歌的文件 To install in
  • 更新到 dotnet 6 后 dotnet run 不起作用

    我昨天从 Net 5 更新到 Net 6 现在我的项目无法启动dotnet run 然后我得到错误 Building warn Microsoft AspNetCore Server Kestrel Core KestrelServer 5
  • C++ fstream 从选定点擦除文件内容

    我需要删除文件内容从选定的点 C fstream 我应该使用哪个函数 我已经写了objects 我需要删除这些objects在文件的中间 C 没有在给定点截断文件的标准机制 您要么必须重新创建该文件 使用以下命令打开ios trunc并写入
  • 正则表达式至少匹配一个字符或一个空格

    我正在使用以下正则表达式来找出检测至少一个字符 b a zA Z0 9 1 现在我还需要探测空间 我怎样才能做到这一点 您可以使用以下方法检测正则表达式中的空格 s 该标记将捕获字符串中的任何空格 在您的正则表达式中 您可以包含此标记 s括
  • 会话/实体管理器已关闭

    我有这个 Hibernate dao 在我的本地机器上测试时它运行良好 但对于某些交易它会抛出IllegalStateException 我相信这是因为多个用户同时点击它 我可能是错的 更新支付道 Repository public cla
  • 修改PIN中的申请指令

    我正在使用英特尔 PIN 来修改我的应用程序中的指令 我使用此链接中的 Safecopy 示例作为参考 https software intel com sites landingpage pintool docs 81205 Pin ht
  • Prolog列表有未实例化的尾部,需要去掉它

    我正在开发 Prolog 程序 它产生正确的输出 一个列表 但该列表末尾有一个未实例化的变量 我做错了事 并且不知道如何摆脱它 这是代码 plaatsingen plaatsingen Prod Hoev Rest Order Plaats
  • 使用 awk sed 解析更新 puppet 文件

    我有一个包含多行代码的木偶文件 其中有一个部分如下所示 defaultrepo myrepo defaultbranch mybranch gitmod pullstuff othergitcode gitcommit gt b54123b