O exemplo a seguir deve funcionar para você.
sed 's#<a href="">\(.*\)</a>#<a href="HTML-EX/html/.html"></a>#'
Primeiro, captura o texto entre as tags a, representado pela variável . Em seguida, use a variável na string de resultado.
Geralmente, para substituir strings em vários arquivos, basta usar
sed -i 's/string1/string2/g' *
No entanto, como eu poderia usar o comando sed
(ou qualquer coisa que funcionasse, na verdade) para substituir as strings por conteúdo relativo a elas. Por exemplo:
<td><a href="">a</a></td>
<td><a href="">abbr</a></td>
<td><a href="">address</a></td>
<td><a href="">area</a></td>
...
Usando o exemplo acima, o que eu poderia usar para substituir o texto de forma que o resultado seja assim:
<td><a href="HTML-EX/html/a.html">a</a></td>
<td><a href="HTML-EX/html/abbr.html">abbr</a></td>
<td><a href="HTML-EX/html/address.html">address</a></td>
<td><a href="HTML-EX/html/area.html">area</a></td>
...
onde ele está substituindo as aspas duplas ""
pela string por alguns caracteres em relação a ela.
perl -i -pe 's|<a\hhref=\K "" (?=>([^<]+)</a>)|"HTML-EX/html/$1.html"|gx' *
Use o lookbehind e lookahed em ""
e insira a string necessária dentro dessas aspas duplas com base na captura lookahead.