シェルスクリプトの浮動小数点数に一致する正規表現

シェルスクリプトの浮動小数点数に一致する正規表現

浮動小数点数と一致させるために正規表現を使用しています。

for f in $float_numbers ; do
    if [ $f =~ "[0-9]*\.?[0-9]*" ] ; then
        echo "****f is $f ****"
    fi
done

など$float_numbersの浮動小数点数を含みます1.210.54.0

しかし、一致するものはありません。

ベストアンサー1

terdonが構文を修正しましたが、正規表現が正しくありません。

[0-9]*\.?[0-9]*

すべての数量子(*、、?)は、式のすべての部分がオプションであることを示します。つまり、正規表現は、空の文字列と数字のない文字列を含むすべての文字列と一致します。

浮動小数点数を一致させるには、少なくとも1つの数字が一致する必要があります。

([0-9]+\.?[0-9]*)|([0-9]*\.[0-9]+)

オプションの小数点とオプションの数字(たとえば、3.14または42)を持ついくつかの数字、または小数点と必要な数字を持ついくつかのオプションの数字(たとえば、.1234または3.14)と一致します。

固定されていないため、「PIは3.14で始まり続けます」という文字列が一致します。

テスト:

for n in "" "no digits" 42 3.14 "this is .1234 go"; do 
    if [[ $n =~ ([0-9]+\.?[0-9]*)|([0-9]*\.[0-9]+) ]]; then
        echo "yes -- $n -- ${BASH_REMATCH[0]}"
    fi
done
yes -- 42 -- 42
yes -- 3.14 -- 3.14
yes -- this is .1234 go -- .1234

おすすめ記事