浮動小数点正規表現のみが許可されます。

浮動小数点正規表現のみが許可されます。

特定の文字列が浮動小数点であるかどうかを確認するには?これは浮動小数点で可能です。

12.245
+.0009
3.11e33
43.1E11
2e-14

私が試したことは次のとおりです。

grep "^[+\-\.0-9]" 
grep "^[+-]*[0-9]"
grep "^[+\-\.0-9]" 

他の多くの関連がありますが、まったくフィルタリングされません。ほぼすべての文字列が交差します。この問題をどのように解決できますか?

ベストアンサー1

grep -xE '[-+]?[0123456789]*\.?[0123456789]+([eE][-+]?[0123456789]+)?'

を使用して-x行の先頭と位置に正規表現を固定するので、行のどこにもパターンが見つからず、行がパターン全体と一致する必要があります。

サポートされているすべての項目を一致させるにはPOSIX/Cstrtod()このユーティリティの多くの実装で認識されるように、次のようprintfになります。

r=[$(locale decimal_point)]
d=[0123456789]
h=[0123456789abcdefABCDEF]
grep -xE "[[:space:]]*[-+]?($d*$r?$d+([eE][-+]?$d+)?|\
0[xX]$h*$r?$h*([pP][-+]?$d+)?|\
[iI][nN][fF]([iI][nN][iI][tT][yY])?|\
[nN][aA][nN]|\
NAN\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]+\))"

0x3f、0xFP-4、-Infinity、NAN(何でも)のようなものも同様です。

$ printf '%g\n' 0x3f 0xFp-4 -Infinity 'NAN(whatever)'
63
0.9375
-inf
nan

おすすめ記事