sed -e 's!<E> *!<E> !g' -e 's! *</E>! </E>!g'
(Nota: usei ! em vez de # ou / como meu delimitador de expressão regular. Preferência pessoal.)
sed pode receber mais de um comando para ser executado em sua entrada, contanto que cada um seja prefixado com o sinalizador -e .
O * após o espaço nas expressões regulares acima significa "corresponde a 0 ou mais caracteres de espaço". A página re_format man fornece mais informações sobre essa repetição:
An atom followed by '
*' matches a sequence of 0 or more matches of the atom. An atom followed by '+' matches a sequence of 1 or more matches of the atom. An atom followed by '?' matches a sequence of 0 or 1 matches of the atom.
em que um "átomo" é o sub-padrão antes do * , + ou ? .
A executar este comando sed nos seus exemplos:
reedm@www:/tmp $ cat > example.txt
<E>This is text </E>
<E> This is text</E>
<E> This is text </E>
<E> This is text </E>
reedm@www:/tmp $ sed -e 's!<E> *!<E> !g' -e 's! *</E>! </E>!g' example.txt
<E> This is text </E>
<E> This is text </E>
<E> This is text </E>
<E> This is text </E>