在我的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>)'
但在这种情况下,它只打印几秒钟或同样我只能打印最少。
请在这个正则表达式中帮助我。
答案 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小时”),但它应该足以为你工作。