使用标记标签的化学式中的 sed/awk 下标数字

mar*_*rkb 7 scripting awk text-processing html

我有数百个文本文件,其中包括化学公式以及包括数值在内的叙述。公式总是以空格开头,但后面可以跟空格、逗号、句点等。

问题是:公式没有格式化为将数字显示为下标,例如:

H2SO4、C5H11OH。

我想将下标格式化为 HTML 标签,例如:

H<sub>2</sub>SO<sub>4</sub>, C<sub>5</sub>H<sub>11</sub>OH
Run Code Online (Sandbox Code Playgroud)

以便下标以 HTML 呈现,例如:

H 2 SO 4 , C 5 H 11 OH

我曾尝试用 Java、php 等来实现这一点,但实现起来必然是混乱和笨拙的。我怀疑有一种优雅的 sed/awk 方法。

显然,解决方案的一部分是制作一个正则表达式,匹配一个字母后跟一个或多个数字作为公式检测机制(可能存在误报,稍后我将手动更正)。然后,给定这样确定的公式,sed 替换需要在每个数字或数字序列之前加上sub标签,并在其后加上子标签闭包。

一定有一个单线可以做到这一点,但我已经无法理解了。

有任何想法吗?

PSk*_*cik 4

例如:

sed -r 's:([A-Za-z])([0-9]+):\1<sub>\2</sub>:g'  
Run Code Online (Sandbox Code Playgroud)

应该做这项工作。

(匹配一个字母后跟一组数字,并将其记住为 \1 和 \2。将所有这些替换为相同的字母 (\1) 加上标记中包含的数字组 (\2) sub。)