如何在awk中使用cat命令

时间:2018-01-10 15:13:27

标签: 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"
        }

我正在做这样的事情来改变versionCode:

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

和versionName:

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

         '''

1 个答案:

答案 0 :(得分:1)

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

看看这个例子:

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

您将看到值已更新。当然,它并不完全是您想要的,例如,versionNumber值未包含引号。你可以自己处理这些案件。我希望上面的单行显示awk处理两个文件的方式。