我想在一个文件中grep版本号并将其替换为另一个文件。我想在文件1中grep 4.3.0.5并在文件2中将其替换为4.3.0.2。我有以下命令来获取数字,但我如何在第二个文件中剪切/替换它?
文件1:
应用程序:4.3.0.5(或)应用程序:4.3.0.5-SNAPSHOT
文件2: 之前编辑
grid_application_distribution_url = 关系://com.abcd.efge.ce/App/的 4.3.0.2 /tar.gz/config
文件2 :编辑后(所需结果)
如果文件中的$ VERISON没有单词SNAPSHOT,那么在文件2中
grid_application_distribution_url = 关系://com.abcd.efge.ce/App/的 4.3.0.5 /tar.gz/config
如果$ VERSION有SNAPSHOT,那么文件2中的行应为
grid_application_distribution_url = 关系快照://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
答案 0 :(得分:2)
这就是你需要的东西:
awk -F': +' 'NR==FNR{v=$2;next} {sub(/[^/]+\/tar.gz/,v"/tar.gz")} 1' File1 File2 > tmp && mv tmp File2
答案 1 :(得分: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
您将在stdout中获得结果。
如评论中所示,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
答案 2 :(得分: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