linux - 如何在 awk 中使用 cat 命令

标签 linux bash jenkins awk

我正在尝试根据另一个文件的内容替换一个文件的文本。例如build.xml有这样的内容:

 defaultConfig {
        versionCode 1035
        versionName "1.15.2"
    }

其中另一个文件 version.text 已更新 versionCode 和 versionName

versionCode 1044
versionName 1.20.10

我想通过从 version.text 文件复制适当的值来替换 build.xml 文件的 versionCode 和 versionName。所以 build.xml 文件的最终结果应该是这样的:

 defaultConfig {
            versionCode 1044
            versionName "1.20.10"
        }

我正在做类似的事情来更改版本代码:

awk '/versionCode /'cat /opt/scripts/version.text |head -1|tail -c -5'' build.xml > tmp && mv tmp build.xml

版本名称:

awk '/versionName /'cat /opt/scripts/version.text |tail -c -7'' build.xml > tmp && mv tmp build.xml

但是这些命令没有按预期工作。有人可以提示我使用单个命令来执行此操作吗?

PS:我想在 jenkin 管道脚本中运行它,类似于下面的语法:

sh'''#!/bin/bash -xe
             awk '/versionName /'cat /opt/scripts/version.text |tail -c -7'' build.xml > tmp && mv tmp build.xml

         '''

最佳答案

awk 可以处理多个文件,也就是说,根据您的要求,您不需要 awk 代码中的 cat

看看这个例子:

awk 'NR==FNR{a[$1]=$2;next}$1 in a{$2=a[$1]}7' version.txt build.xml

您将看到值已更新。当然,这并不完全是您想要的,例如,versionNumber 值没有用引号引起来。您可以自己处理这些情况。我希望上面的一行代码向您展示了 awk 如何处理两个文件的方式。

关于linux - 如何在 awk 中使用 cat 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48190482/

相关文章:

linux - 如何将 qt5 添加到我的 openembedded 构建中?

mysql - 脚本化 Jenkinsfile 中的多个 Docker

c++ - 如何为 PerfPublisher 插件生成 xml dtd 报告以在 jenkins 上可视化?

regex - 如何在字符串中的单个单词周围添加引号,而不是在已经有引号的子字符串周围添加引号?

linux - Bash 脚本到带有彩色线条的 tail -f

jenkins - 创建拉取请求到分支时,Github 不触发作业

linux - 无法使用 makefile 进行编译 - 未定义对 `boost::re_detail 的引用

c - 区分文件系统上的文件

java - Azure 应用服务中的错误 : java. lang.UnsatisfiedLinkError: failed to load the required native library

linux - Bash - 在命令中使用变量不起作用