grep a time hh:mm:ss



我需要分割给定的日期格式(hh:mm:ss),如:10:30:50在如下变量中:hour=10;在bash脚本中,分钟=30秒=50。

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

seconds= 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

注意:& lt; & lt; & lt;表示从变量

读取

@fedorqui,@kent,

$ echo ${time:0:2}
10
$ echo ${time:3:2}
30
$ echo ${time:6:2}
50

最新更新