Вы бы далеко гораздо лучше использовать инструмент, поддерживающий XML
. Если это действительно простой случай извлечения значения атрибута time
, вы можете использовать sed
. Как вы увидите из большинства ответов здесь, на самом деле лучший подход - использовать инструмент, который понимает XML, но для действительно простых случаев вы можете обойтись с помощью sed
.
xml='<results><testsuites><testcase name="XXXX (XXXXX)" time="20.3817"><result>success</result></testcase><total_time value="20.3830" /></testsuites></results>'
echo "$xml" | sed -nr 's/.* time="([0-9.]+).*/\1/p' # GNU
28.3817
echo "$xml" | sed -n 's/.* time="\([0-9.]*\).*/\1/p' # Non-GNU
28.3817
Или grep
echo "$xml" | grep -Po '(?<=time=")([0-9.]+)' # GNU
20.3817
Но я бы все же предпочел что-то с поддержкой XML, например xmlstarlet
, которое может распознавать время
как атрибут
.