La tua regexp
sed 's#&*;##g' <file>
non fa quello che pensi che faccia. Il *personaggio è un moltiplicatore che dice che il carattere precedente viene ripetuto 0 o più volte. Il carattere precedente è &, quindi corrisponderebbe ad esempio &&&;e ;( &è stato scritto 0 volte prima ;! Questo è ciò che corrisponde nei casi di test) ma non quello che vuoi in questo caso.
È necessario specificare " qualsiasi carattere" prima del moltiplicatore, che è rappresentato da un singolo punto, ..
$ echo 'Text:3' | sed 's#&.*;##g'
Text3
Questo è stato il primo problema. Il secondo è il concetto del cosiddetto abbinamento "avido": sedvedrà il primo &e poi proverà ad abbinare la stringa più grande possibile. Se hai più entità HTML su una sola riga, questo sarebbe un problema poiché:
$ echo 'Text:3 and some more text å and end' | sed 's#&.*;##g'
Text and end
Se vuoi vedere una correzione nel sedcontesto, puoi cercare il carattere finale dell'entità abbinando qualsiasi numero di " non ; " prima di una chiusura ;facendo:
$ echo 'Text:3 and some more text å and end' | sed 's#&[^;]*;##g'
Text3 and some more text and end
Avrai ancora problemi con gli usi legittimi del segno e commerciale ( &) nel testo (beh, &è il vero uso "legittimo", ma il mondo reale non è sempre analizzabile come quello ideale) e si abbina troppo, ma questo spiega perché si sedsta comportando così.