Para uma solução sed , veja mais abaixo nesta resposta.
Supondo que os a são parte de um documento XML bem formado e que você deseja anexar .xhtml ao valor de suas tags href quando os valores existentes começarem com /entry/ :
xml ed -u '//a[starts-with(@href, "/entry/")]/@href' \
-x 'concat(../@href,".xhtml")' file.xml >file-new.xml
Isso usa XMLStarlet (às vezes instalado como xmlstarlet em vez de apenas xml ) e ele encontrará o% relevantea nós e acrescentar .xhtml aos seus atributos href , independentemente de onde no documento eles ocorrem.
O resultado é salvo em um novo arquivo aqui, mas você pode usar xml ed --inplace ... para editar o arquivo no lugar depois de ter certeza de que funciona.
Teste:
$ cat file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1"/>
<a href="/entry/someFile2"/>
<a href="/entry/someFile3"/>
</root>
$ xml ed -u '//a[starts-with(@href, "/entry/")]/@href' -x 'concat(../@href,".xhtml")' file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1.xhtml"/>
<a href="/entry/someFile2.xhtml"/>
<a href="/entry/someFile3.xhtml"/>
</root>
Usando sed (o que você não usa normalmente em um arquivo XML bem formado):
sed 's|<a href="/entry/[^"]*|&.xhtml|g' file.xml
Isso corresponde à string <a href="/entry/ seguido por qualquer número de caracteres que não são " (esse seria o nome do arquivo). Essa parte inteira correspondente é então substituída por si mesma e pela string .xhtml .
Com sed -i , isso tornaria a modificação em vigor.
Teste (no mesmo arquivo acima):
$ sed 's|<a href="/entry/[^"]*|&.xthml|g' file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1.xhtml"/>
<a href="/entry/someFile2.xhtml"/>
<a href="/entry/someFile3.xhtml"/>
</root>