如何检查bash中的输入字符串是否为版本格式(n1.n2.n3)

时间:2012-02-13 16:00:49

标签: regex bash sed

我编写了一个更新某个文件版本的脚本。我需要检查用户的输入是否为版本格式,因此我没有完成添加那些重要文件中不需要的数字。我这样做的方法是添加一个新值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对用点分隔的数字?

2 个答案:

答案 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] ]]