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

QAS*_*ing 3 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
Run Code Online (Sandbox Code Playgroud)

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

<value>1 hr 54 min</value>
Run Code Online (Sandbox Code Playgroud)

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

请帮助我这个正则表达式.

iru*_*var 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
Run Code Online (Sandbox Code Playgroud)