我正在编写脚本,并且遇到了正确的子字符串值问题。解析Bash中的文件名
文件名是Package-amd64-3.0.11.deb。我需要从这个名字中提取“3.0.11”,但是当我使用子字符串时,我不知道如何正确预测字符的数量(如果我有一个版本为3.0.9的文件,会中断)
fName="/etc/deb/Package-amd64-3.0.11.deb"
version="${fName:23:29}"
我正在编写脚本,并且遇到了正确的子字符串值问题。解析Bash中的文件名
文件名是Package-amd64-3.0.11.deb。我需要从这个名字中提取“3.0.11”,但是当我使用子字符串时,我不知道如何正确预测字符的数量(如果我有一个版本为3.0.9的文件,会中断)
fName="/etc/deb/Package-amd64-3.0.11.deb"
version="${fName:23:29}"
两个步骤。首先,剥去一切直到并包括最后-
:
version=${fName##*-}
接着,剥去延伸:
version=${version%.deb}
这应该是针对在包名称的变化合理弹性的,并且可以容易地,如果被修改必要。
这可能比较容易除去已知的后缀,前缀:
fName="/etc/deb/Package-amd64-3.0.11.deb"
version="${fName%.deb}"
version="${version##*-}"
使用sed
:
fName="/etc/deb/Package-amd64-3.0.11.deb"
sed -E 's/.*-(.+)\.[^.]*$/\1/' <<< "$fName"
3.0.11
使用awk的,你可以这样做:
awk -F- '{sub(/\.[^.]*$/, ""); print $NF}' <<< "$fName"
3.0.11
'[ “/etc/deb/Package-amd64-3.0.11.deb”=〜[0- 9] + \。[0-9] + \。[0-9] +]] && echo“$ {BASH_REMATCH [0]}”'或类似的东西。 – Biffen