Você pode pré-processar seu arquivo para inserir um caractere especial para as strings que deseja colocar na lista de permissões para impedir sua substituição.
Como você mudaria:
<user1></user1>
<password2></password2>
Para
<user1></user1>
<|password2><|/password2>
primeiro e use s/\(<[^|0-9>]*\)[0-9]*\([^0-9]*>\)//g
para a substituição. Se |
já pode ocorrer na entrada, você pode escapar usando um esquema como: _
- > _u
, |
- > _p
que você poderia desfazer depois.
sed '
s/_/_u/g;s/|/_p/g
s:<\(/\{0,1\}password2>\):<|:g
s:<\(/\{0,1\}othertag>\):<|:g
s/\(<[^|0-9>]*\)[0-9]*\([^0-9]*>\)//g
s/|//g;s/_p/|/g;s/_u/_/g'