我需要拆分给定的日期格式(hh:mm:ss),例如:10:30:50 在变量中,例如:hour=10; minute=30 和 seconds=50 在 bash 脚本中使用 grep。
我得到了一个变量的时间,例如: time="10:30:50" 我只用下面的表达式得到秒:
秒=
echo $time | grep -oE "[^:]+$"
任何帮助获得分钟和小时?
使用read
. 它是一个 shell 内置命令,因此比grep
,sed
和其他外部命令更有效。
time="10:30:50"
IFS=: read hr min sec <<< "$time"
输出:
$ echo "$hr"
10
$ echo "$min"
30
$ echo "$sec"
50
见下文 :
kent$ time="10:30:50"
kent$ h=$(awk -F: '$0=$1' <<<"$time")
kent$ m=$(awk -F: '$0=$2' <<<"$time")
kent$ s=$(awk -F: '$0=$3' <<<"$time")
kent$ echo $h,$m,$s
10,30,50
与sed
:
echo '10:30:50' | sed 's/\([0-9]\+\):\([0-9]\+\):\([0-9]\+\)/hours=\1 minutes=\2 seconds=\3/'
使它成为一个函数:
function stringToTime() {
eval $( echo "$1" | sed 's/\([0-9]\+\):\([0-9]\+\):\([0-9]\+\)/hours=\1 minutes=\2 seconds=\3/' )
}
现在你可以调用它:
stringToTime 10:30:50
echo $hours hours, $minutes minutes and $seconds seconds
sed, grep, awk 是外部命令,尝试使用 shell 内置命令提取您需要的信息
D=12:10:12
IFS=:
read H M S <<< $D
注意:<<< 表示从变量中读取
@fedorqui,@kent,
$ echo ${time:0:2}
10
$ echo ${time:3:2}
30
$ echo ${time:6:2}
50