1

我想在一个文件中grep版本号并在另一个文件中替换它。我想在文件 1 中 grep 4.3.0.5 并在文件 2 中的 4.3.0.2 替换它。我有以下命令来获取数字,但是如何在第二个文件中剪切/替换它?

File1 :
应用程序:4.3.0.5(或)应用程序:4.3.0.5-SNAPSHOT

File2: 编辑

grid_application_distribution_url = nexus : //com.abcd.efge.ce/App/4.3.0.2/tar.gz/config

文件2:编辑期望结果:)

如果文件中的 $VERISON 没有 SNAPSHOT 这个词,那么在文件 2 中

grid_application_distribution_url = nexus : //com.abcd.efge.ce/App/4.3.0.5/tar.gz/config

如果 $VERSION 有 SNAPSHOT 那么文件 2 中的行应该是

grid_application_distribution_url = nexus-snapshot : //com.abcd.efge.ce/App/4.3.0.5/tar.gz/config

   VER=$(awk -F: '/^App/{sub(/ .*$/, "", $2); print $2}'/path/file1.txt)

echo $VER

if ($vER ~ /SNAPSHOT/)
/usr/bin/ssh -t -t server2.com "sub("=nexus:", ":=nexus-snapshot") /path/file2" && sub(/[^\/]+\/tar\.gz/, $VER"/tar.gz") /path/file2
4

3 回答 3

2

你只需要这样的东西:

awk -F': +' 'NR==FNR{v=$2;next} {sub(/[^/]+\/tar.gz/,v"/tar.gz")} 1' File1 File2 > tmp && mv tmp File2
于 2013-04-23T18:48:38.443 回答
0

你可以试试这个:

VERSION=($(grep -r "App:" /path/File1| awk  '{print ($2)}'))
sed -i "s/4.3.0.2/$VERSION/" File2

它将查找“4.3.0.2”并按$VERSION. File2 将使用此更改进行更新。

如果您希望文件保持不变,请删除标志-i

sed "s/4.3.0.2/$VERSION/" File2

您将在标准输出中获得结果。


如评论中所示,4.3.0.2并非每次都这样。适应格式X.Y.Z.W

sed "s/\/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]\(\/tar.gz\)/\/$VERSION\1/" File2
于 2013-04-23T14:28:31.670 回答
0

这个 awk 脚本可以完成这项工作(这是对@EDMorton 上述答案的增强):

根据 OP 的要求将命令拆分为 2

VER=$(awk -F' *: *' '/^App/{print $2}' file1)

awk -v v="$VER" '{
     split(v, arr, "-");
     sub(/[^\/]+\/tar\.gz/, arr[1]"/tar.gz");
     if (arr[2] ~ /SNAPSHOT/)
        sub("=nexus:", ":=nexus-snapshot")
}1' file2 > tmpFile

mv tmpFile > file2
于 2013-04-23T14:42:56.667 回答