Вы всегда можете проверить только цепочки из [0-9]
, чтобы проверить целое число:
$ echo 17 | sed -n '/^[0-9][0-9]*$/p'
17
$ echo 17.12 | sed -n '/^[0-9][0-9]*$/p'
$
, но в целом при проверке чисел в других контекстах не пытайтесь использовать регулярное выражение (и так не пытайтесь использовать sed, grep, et c.), используйте вместо этого awk:
$ echo 17 | awk '{print $0, "is " ($0==($0+0) ? "" : "NOT ") "a number"}'
17 is a number
$ echo 17.12 | awk '{print $0, "is " ($0==($0+0) ? "" : "NOT ") "a number"}'
17.12 is a number
$ echo 17.12.53 | awk '{print $0, "is " ($0==($0+0) ? "" : "NOT ") "a number"}'
17.12.53 is NOT a number
$ echo 003 | awk '{print $0, "is " ($0==($0+0) ? "" : "NOT ") "a number"}'
003 is a number
$ echo 2e7 | awk '{print $0, "is " ($0==($0+0) ? "" : "NOT ") "a number"}'
2e7 is a number
$ echo 2f7 | awk '{print $0, "is " ($0==($0+0) ? "" : "NOT ") "a number"}'
2f7 is NOT a number