der nachfolgende Ausdruck findet leider zu wenig
grep "<[^\ ][^>]+[^\ ]>" test.txt
Klar, weil mindestens drei Zeichen zwischen < und > stehen müssen.
Wenn du es genauer haben willst, dann musst du die Start-Tag-Syntax genauer mit einem regulären Ausdruck (vereinfacht) abbilden. Ein Start-Tag besteht aus einem <, darauf folgen einige Buchstaben und ggf. Zahlen. Dann ist der Tag zuende oder es kommen noch Attribute. Die fangen mit Whitespace an, dann kommt der Attributname aus Buchstaben, dann das Gleichheitsszeichen, dann der Attributwert eingefasst in " oder '. Dieses Schema kann beliebig häufig. Schließlich steht am Ende >.
Könnte z.B. so aussehen:
<[a-z\d]+(\s+[a-z]+=("[^"]*"|'[^']*'))*>
Das nur als Beispiel, nicht als Fertiglösung. Eine solche kannst du mit den Hinweisen aber erarbeiten.
Mathias