Basta eliminar todos os caracteres que não sejam dígitos e não o espaço:
echo '<Summary failed="10" notExecuted="0" timeout="0" pass="18065" />'|\
sed -e 's/[^0-9 ]//g'
dá
10 0 0 18065
.
A soma pode ser feita com dc (com o campo de tempo limite filtrado conforme solicitado)
echo '<Summary failed="10" notExecuted="0" timeout="0" pass="18065" />'|\
sed -e 's/timeout="[0-9]*" //' \
-e 's/[^0-9 ]//g' \
-e 's/^ *//' \
-e 's/ *$//' \
-e 's/ /+/g' \
-e 's/^/0 /' \
-e 's/$/pq/'|dc
.
Descrição
Como um script sed, ficaria assim
s/timeout="[0-9]*" // #remove the timeout
s/[^0-9 ]//g #drop anything but numbers and spaces
s/^ *// #drop spaces at the beginning of the line
s/ *$// #drop spaces at the end of the line
s/ /+/g #replace remaining spaces with +
s/^/0 / #add a 0 to initialize the sum for dc
s/$/pq/ #add print and quit command for dc
O script pode ser usado simplesmente com
INPUT|sed -f script.sed
Deixo para você aplicar este script com sed e dc para entrada de múltiplas linhas. O que eu escrevi só funciona em uma linha!