grep a time hh:mm:ss

时间:2013-04-09 09:31:46

标签: linux bash grep

我需要分割给定的日期格式(hh:mm:ss),如:10:3​​0:50 在变量如:小时= 10;在bash脚本中,minute = 30和seconds = 50 whit grep。

我得时间不变,例如:time =“10:30:50” 我只用以下表达式获得秒数:

  

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

获得分钟和时间的任何帮助?

5 个答案:

答案 0 :(得分:8)

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

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

输出:

$ echo "$hr"
10
$ echo "$min"
30
$  echo "$sec"
50

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

sed,grep,awk是外部命令,尝试使用shell builtin命令提取所需信息

D=12:10:12

IFS=:

read H M S <<< $D

注意:&lt;&lt;&lt;意味着从变量中读取

答案 4 :(得分:0)

@fedorqui, @kent,

$ echo ${time:0:2}
10

$ echo ${time:3:2}
30

$ echo ${time:6:2}
50