3

在我的build.xml文件中,我想在 shell 脚本中使用正则表达式来提取时间,这将是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>)' ,但在这种情况下,它只会打印 sec,或者同样我只能打印 min。

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

4

2 回答 2

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
于 2013-06-01T21:17:40.410 回答
1

使用这个正则表达式:

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

它并不完全是规定性的(例如它允许“3 hr 4 hr”),但它应该足以为您工作。

于 2013-06-01T21:10:13.640 回答