Que tal:
sed 's_^\([^>]\+>\)\([[:digit:]]\+\)_<a href=".html">link</a>_' file.txt
-
Estamos usando
_no formato do padrão de substituiçãosed, em vez disso,/como/está presente na entrada -
^\([^>]\+>\)encontra os caracteres até>(inclusive) e os coloca em um grupo -
\([[:digit:]]\+\)encontra os dígitos mencionados e os coloca em um grupo para que possamos usá-los posteriormente -
O padrão de substituição é
<a href=".html">link</a>, em queé o primeiro grupo correspondente eé o segundo grupo correspondenteExemplo:
$ sed 's_^\([^>]\+>\)\([[:digit:]]\+\)_<a href=".html">link</a>_'<<<'<td nowrap align="right">4683</td>' <td nowrap align="right"><a href="4683.html">link</a></td>
Se não houver dígitos em outro lugar na linha, você poderá simplesmente usar:
sed 's_[[:digit:]]\+_<a href="&.html">link</a>_' file.txt
Exemplo:
$ sed 's_[[:digit:]]\+_<a href="&.html">link</a>_'<<<'<td nowrap align="right">4683</td>'
<td nowrap align="right"><a href="4683.html">link</a></td>