外壳脚本中"小时分钟秒"时间格式的正则表达式?



在我的build.xml文件中,我想在shell脚本中使用regex提取时间,这将是d hr d min d sec格式。时间并不总是相同的模式,它会有所不同,例如:

1 sec
1 min
2 min 3 sec
4 hr 5 min

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

<value>1 hr 54 min</value>

我用cat build.xml | grep -oP '(?<=<value>).*sec?(?=</value>)'但在本例中,它将只打印秒或者同样地,我也可以只打印min。

这个怎么样?

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

使用这个正则表达式:

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

它不是完全规定的(例如它允许"3小时4小时"),但它应该足够好,为您工作

最新更新