shell脚本中的'hr min sec'时间格式的正则表达式?

时间:2013-06-01 21:03:44

标签: regex grep time-format

在我的build.xml文件中,我想在shell脚本中使用正则表达式提取时间,该脚本将采用d hr d min d sec格式。 并且时间不会总是处于相同的模式,例如:

1 sec

1 min

2 min 3 sec

4 hr 5 min

现在我想使用正则表达式从我的文件中获取时间值。 在xml文件中,它将是值标记:

<value>1 hr 54 min</value>

我使用了cat build.xml | grep -oP '(?<=<value>).*sec?(?=</value>)' 但在这种情况下,它只打印几秒钟或同样我只能打印最少。

请在这个正则表达式中帮助我。

2 个答案:

答案 0 :(得分:5)

怎么样?

echo '<value>4 hr 3 sec</value>' 
| grep -oP '(?<=<value>)(\d+\s+hr)?(\s*\d+\s+min)?(\s*\d+\s+sec)?(?=</value>)'

4 hr 3 sec

echo '<value>3 sec</value>' |
 grep -oP '(?<=<value>)(\d+\s+hr)?(\s*\d+\s+min)?(\s*\d+\s+sec)?(?=</value>)'

3 sec

答案 1 :(得分:1)

使用此正则表达式:

(?<=<value>)(\\d+ (hr|min|sec) ?){1,3}(?=</value>)

这不是规定性的(例如它允许“3小时4小时”),但它应该足以为你工作。