Você pode usar a opção cut de -d para definir um delimitador (que é excluído dos campos resultantes):
echo "<xml:attribute>{41c33a-4893b-3627a-617a}</xml:attribute>" | cut -d\> -f2 | cut -d\< -f1
Isso se divide em > e gera o segundo campo, deixando {41c33a-4893b-3627a-617a}</xml:attribute , depois novamente em < e produz o primeiro campo.
Os campos descrevem o texto entre delimitadores e entre o início do texto e o primeiro delimitador e o último delimitador e o final do texto. Usando > no texto original, você acaba com:
-
<xml:attribute -
{41c33a-4893b-3627a-617a}</xml:attribute - a string vazia
(o delimitador é omitido). Então, usando < no campo 2, dá
-
{41c33a-4893b-3627a-617a} -
/xml:attribute
e o campo 1 é o resultado que você está procurando.