Como você mencionou que pode haver falsos positivos para corrigir manualmente mais tarde, convém considerar um formulário um pouco mais robusto, que incorpore as seguintes restrições:
- Todos os símbolos químicos iniciam com uma letra maiúscula.
- Todos os símbolos químicos são uma única letra maiúscula ou uma única letra maiúscula seguida por uma única letra minúscula, exceto apenas designadores temporários que vou ignorar.
Considerando isso, você pode tentar, por exemplo:
sed 's|\([[:upper:]][[:lower:]]\{0,1\}\)\([0-9]\{1,\}\)|<sub></sub>|g'
Com a opção não-POSIX -r
, isso se torna um pouco mais legível, mas menos portável:
sed -r 's|([[:upper:]][[:lower:]]?)([0-9]+)|<sub></sub>|g'
Isso poderia ser melhorado ainda mais, assegurando que a " toda " palavra "sendo trabalhada não contenha letras minúsculas consecutivas e, claro, poderia ser melhorada ainda mais verificando especificamente cada possível símbolo químico, mas isso fica mais chique e extravagante por menos recompensa. O acima deve reduzir drasticamente os falsos positivos já.