如何在 awk 中使用 cat 命令



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

 defaultConfig {
        versionCode 1035
        versionName "1.15.2"
    }

其中另一个文件版本.文本已更新版本代码和版本名称

versionCode 1044
versionName 1.20.10

我想通过从 version.text 文件中复制适当的值来替换 build.xml 文件的 versionCode 和版本名称。 所以 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 如何处理两个文件。

最新更新