Вы можете использовать strings
с минимальной длиной, скажем, в пять символов
strings -w -n5 corrupted.txt
#!/bin/sh
is_integer ()
{
case "${1#[+-]}" in
(*[!0123456789]*) return 1 ;;
('') return 1 ;;
(*) return 0 ;;
esac
}
Используются только встроенные функции POSIX. Из спецификации неясно, должно ли +1
быть целым числом, если нет, то удалите +
из строки case
.
Это работает следующим образом. ${1#[+-]}
удаляет необязательный ведущий знак. Если у вас осталось что-то, содержащее не цифру, то это не целое число, точно так же, если у вас ничего не осталось. Если это не не целое число, то это целое число.
Редактировать :заменить ^ на ! чтобы отменить класс символов -спасибо @LinuxSecurityFreak