我编写了一个脚本,用于更新某个文件的版本。我需要检查用户的输入是否为版本格式,这样我就不会在那些重要文件中添加不需要的数字。我做这件事的方法是添加一个新的值version_check,在这里我删除了我的正则表达式模式,然后添加了一个if检查。
version=$1
version_checked=$(echo $version | sed -e '/[0-9]+.[0-9]+.[0-9]/d')
if [[ -z $version_checked ]]; then
echo "$version is the right format"
else
echo "$version_checked is not in the right format, please use XX.XX.XX format (ie: 4.15.3)"
exit
fi
这适用于XX.XX和XX.XX.XX,但也允许XX.XX.XX.XX、XX.XX.XX.XX.XX等。因此,如果用户犯了错误,它将在文件中输入错误的数据。如何使sed正则表达式只允许3对由点分隔的数字?
从以下位置更改正则表达式:
/[0-9]+.[0-9]+.[0-9]/
到此:
/^[0-9]*.[0-9]*.[0-9]*$/
您可以使用bash模式匹配来实现这一点:
$ for version in 1.2 1.2.3 1.2.3.4; do
printf "%st" $version
[[ $version == +([0-9]).+([0-9]).+([0-9]) ]] && echo y || echo n
done
1.2 n
1.2.3 y
1.2.3.4 n
如果您需要每组数字恰好为2位:
[[ $version == [0-9][0-9].[0-9][0-9].[0-9][0-9] ]]