bash将列的值替换为另一个值

bash将列的值替换为另一个值,bash,Bash,我有一个包含应用程序及其版本号的文件。我想改变他们的版本,从一个自动脚本。这是该文件的一个示例 bm_app:2.2.9 sm_app:7.0.5 现在我有了一个变量来存储新版本的bm_应用程序 echo $fg 5.7.8 现在,当我尝试使用这个变量替换bm_app的版本时,版本的次要部分会附加一个零,如下所示 grep bm LATEST_APP_VERSION.md | awk -F ':' '{print $1":"'$fg'}' bam_app:5.70.8 现在,我不希望将不必

我有一个包含应用程序及其版本号的文件。我想改变他们的版本,从一个自动脚本。这是该文件的一个示例

bm_app:2.2.9
sm_app:7.0.5
现在我有了一个变量来存储新版本的bm_应用程序

echo $fg
5.7.8
现在,当我尝试使用这个变量替换bm_app的版本时,版本的次要部分会附加一个零,如下所示

grep bm LATEST_APP_VERSION.md | awk -F ':' '{print $1":"'$fg'}'
bam_app:5.70.8
现在,我不希望将不必要的零附加到输出中。我尝试了“printf”来格式化它,但没有成功。非常感谢您的帮助

阿什图什

awk -v var=$fg -F: '/bm/ {print $1":"var}' filename
使用-v将变量传递给awk,并使用正则表达式在awk中搜索bm条目,而不是使用grep


使用-v将变量传递给awk,并使用正则表达式在awk中搜索bm条目,而不是使用grep

可以使用-v awk标志传入变量

示例用法:

#!/bin/bash
BM="bm_app:2.2.9"
fg="5.7.8"
echo $BM | awk -v x=$fg -F ':' '{print $1":"x}'
输出:

bm_app:5.7.8

可以使用-v awk标志传入变量

示例用法:

#!/bin/bash
BM="bm_app:2.2.9"
fg="5.7.8"
echo $BM | awk -v x=$fg -F ':' '{print $1":"x}'
输出:

bm_app:5.7.8
使用单个sed命令:

sed 's/\(bm_app:\).*/\1'"$fg"'/' LATEST_APP_VERSION.md
输出:

bm_app:5.7.8
sm_app:7.0.5
使用单个sed命令:

sed 's/\(bm_app:\).*/\1'"$fg"'/' LATEST_APP_VERSION.md
输出:

bm_app:5.7.8
sm_app:7.0.5

非常感谢。它工作得完美无缺。你知道为什么我的awk命令中附加了零吗?很高兴知道为什么awk会这样做。非常感谢。它工作得完美无缺。你知道为什么我的awk命令中附加了零吗?很高兴知道为什么awk会这样做。