Usando sed (ou qualquer coisa útil) para substituir strings com conteúdo relativo

2

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.

    
por esote 20.03.2017 / 04:08

2 respostas

4

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.

    
por 20.03.2017 / 04:14
0
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.

    
por 20.03.2017 / 13:38