Итак, вот пример строки в моем скрипте:
echo "Enter time(MILITARY FORMAT)(i.e 1245): "
read time`
, например, пользовательский ввод 1315
, как я получаю grep 3-го и 4-го разряда (15), и тогда результат должен быть похож на это
Your time is 13 hours and 15 minutes
Необходимо сделать это использование всего bash
, с помощью bash
расширение параметра:
$ time=1315
$ hr="${time%??}" ## getting first two characters
$ min="${time#??}" ## getting last two characters
$ echo "Your time is "$hr" hours and "$min" minutes"
Your time is 13 hours and 15 minutes
Или строковое разрезание (Благодарен за то, что @Serg упоминает), обратите внимание, что индекс запускается в 0:
формат:
${parameter:offset:length}
$ time=1315
$ hr="${time:0:2}" ## getting chars at index 0 and index 1
$ min="${time:2:2}" ## getting chars at index 2 and 3
$ echo "Your time is "$hr" hours and "$min" minutes"
Your time is 13 hours and 15 minutes
, Если Вы настаиваете grep
:
$ time=1315
$ hr="$(grep -o '^..' <<<"$time")" ## getting first two characters
$ min="$(grep -o '.. <<<"$time")" ## getting last two characters
$ echo "Your time is "$hr" hours and "$min" minutes"
Your time is 13 hours and 15 minutes
Используйте cut
:
echo asdf | cut -c 3-4
Возвраты df
,
echo asdfghi | cut 3-
Возвраты dfghi
, работы то же другой путь (-5
все до 5 символов).
Для Вашего конкретного случая:
printf "Enter time(MILITARY FORMAT)(i.e 1245): " read time hours="`echo $time | cut -c 1-2`" minutes="`echo $time | cut -c 3-4`" echo "Your time is "$hours" hours and "$minutes" minutes"
Это будет работать на все допустимые 4 военных исходных данные времени цифры.
Используя расширение параметра:
$ printf "Enter time in military format(HHMM):" && read TIME
Enter time in military format(HHMM):1512
$ echo your time is "${TIME:0:2}" hours and "${TIME:2:2}"
your time is 15 hours and 12
Или можно использовать Python, чтобы сделать задание:
$ python -c "time=str(${TIME}); print 'your time is',time[:2], 'hours and ',time[2:],'minutes'"
your time is 15 hours and 12 minutes
Или AWK:
$ awk -v time=${TIME} 'BEGIN{print "Your time is ",substr(time,1,2)," hours and ",substr(time,3),"minutes"}'
Your time is 15 hours and 12 minutes
grep является инструментом соответствия строки, таким образом, это не является лучшим для этой задачи, но он может соответствовать 2 символам за один раз, таким образом вот метод, но я не рекомендую это:
$ array=( $(grep -o -E '.{0,2}' <<< "${TIME}") )
$ echo ${array[1]}
12
$ echo Your time is ${array[0]} hours ${array[1]} minutes
Your time is 15 hours 12 minutes