2

我需要拆分给定的日期格式(hh:mm:ss),例如:10:30:50 在变量中,例如:hour=10; minute=30 和 seconds=50 在 bash 脚本中使用 grep。

我得到了一个变量的时间,例如: time="10:30:50" 我只用下面的表达式得到秒:

秒=echo $time | grep -oE "[^:]+$"

任何帮助获得分钟和小时?

4

5 回答 5

8

使用read. 它是一个 shell 内置命令,因此比grep,sed和其他外部命令更有效。

time="10:30:50"
IFS=: read hr min sec <<< "$time"

输出:

$ echo "$hr"
10
$ echo "$min"
30
$  echo "$sec"
50
于 2013-04-09T09:33:51.327 回答
1

见下文 :

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
于 2013-04-09T09:35:27.473 回答
0

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
于 2013-04-09T09:35:05.733 回答
0

sed, grep, awk 是外部命令,尝试使用 shell 内置命令提取您需要的信息

D=12:10:12

IFS=:

read H M S <<< $D

注意:<<< 表示从变量中读取

于 2013-04-10T08:53:44.677 回答
0

@fedorqui,@kent,

$ echo ${time:0:2}
10

$ echo ${time:3:2}
30

$ echo ${time:6:2}
50
于 2013-12-27T04:43:51.033 回答