我编写了一个更新某个文件版本的脚本。我需要检查用户的输入是否为版本格式,因此我没有完成添加那些重要文件中不需要的数字。我这样做的方法是添加一个新值version_check,在这里删除我的正则表达式模式,然后是if check。
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 :(得分:4)
从以下位置更改正则表达式:
/[0-9]\+\.[0-9]\+\.[0-9]/
到此:
/^[0-9]*\.[0-9]*\.[0-9]*$/
答案 1 :(得分:0)
您可以使用bash pattern matching执行此操作:
$ for version in 1.2 1.2.3 1.2.3.4; do
printf "%s\t" $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] ]]