【发布时间】:2018-04-04 07:16:04
【问题描述】:
我有一个包含内容的文本文件:(version.txt)
#Project Name: XYZ
#Module Name: ABC
#
#
currentVersion=9.2.04
现在我有一个如下所示的 shell 脚本,它将 version.txt 的最后一行替换为 currentVersion=9.2.05
脚本:
ls_version=`grep -i currentVersion version.txt | awk '{print $NF}'`
counter=`echo $ls_version | awk -F . '{print $NF}'`
fs_version=`echo $ls_version | awk -F"." -v OFS='.' '{$NF=""; print $0}'`
echo "counter b4 addition: $counter"
counter=`expr ${counter} + 1`
version=`echo ${fs_version}$counter`
echo "ls_version: $ls_version"
echo "fs_version: $fs_version"
echo "counter post addition: $counter"
echo "final version: $version"
sed -i -e "s/\(currentVersion=\).*/\1$version/" version.txt
但它却给出了这样的 o/p:
currentVersion=05
currentVersion=05
currentVersion=05
currentVersion=05
currentVersion=05
currentVersion=05
currentVersion=05
你能告诉我这个脚本有什么问题吗?
提前致谢
【问题讨论】:
-
错的太多了....不要通过管道将grep传输到awk,不要存储awk的输出然后使用echo将其传输到另一个awk,不要使用expr ,不要使用 'sed -i',使用 $() 代替反引号。这不是一份详尽的清单。
-
我在您的最终
sed中看不到任何会导致文件内容将每一行替换为“currentVersion=05”的内容。要调试它,请停止使用sed -i并显示实际输出(例如,“计数器 b4 加法”发生了什么?也许您正在运行的代码不是您正在显示的代码)、实际输入和实际代码。 -
@William Pursell,感谢您的回复。删除 sed -I 后。我在 version.txt 文件中看不到任何更改/更新。
-
代码执行:
counter b4 addition: currentVersion=04 ls_version: currentVersion=04 fs_version: empty counter post addition:05 final version : current_Version=05 (multiple entries)