在我的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小时"),但它应该足够好,为您工作