Usando sed (?) para extrair uma instância de uma string que é repetida na string original

3

ENTRADA:

<a href=FII/FOO./>FOO</a>

OUTPUT:

FOO

Q: como posso substituir o INPUT pelo OUTPUT? O FII e "./>" é CONSTANTE. O FOO pode variar para qualquer letra em inglês e "-" e "."

ATUALIZAÇÃO: (para esclarecer "FOO")

FOO=ASD
then: 
<a href=FII/ASD./>ASD</a>

FOO=XYZ
<a href=FII/XYZ./>XYZ</a>

UPDATE2: (este não funciona: O)

[user@notebook ~] echo '<a href=FII/FOO./>FOO</a>'
<a href=FII/FOO./>FOO</a>
[user@notebook ~] echo '<a href=FII/FOO./>FOO</a>' | sed 's/>[ \t]*\([^ \t]\+\)[ \t]*<//'
<a href=FII/FOO./FOO/a>
[user@notebook ~] 
    
por gasko peter 30.10.2013 / 12:25

3 respostas

0

Se você quiser o nome do link:

sed 's@^<a href[^>]*>\([^<]*\)</a>$@@'
    
por 31.10.2013 / 12:28
0

se tudo o que você quer fazer é descartar tudo que está fora de href=FII/ ... ./ , eu recomendaria algo como o seguinte (usando | é o delimitador de sed):

sed -e 's|^.*href=FII/\([A-Za-z.-]*\)\./>.*$||'

exemplo:

$ echo "<a href=FII/ASD./>ASD</a>"|sed 's|^.*href=FII/\([A-Za-z.-]*\)\./>.*$||'
ASD
$ echo "<a href=FII/XYZ./>XYZ</a>"|sed 's|^.*href=FII/\([A-Za-z.-]*\)\./>.*$||'
XYZ
$ echo "<a href=FII/morgel.dorgel./>XYZ</a>"|sed 's|^.*href=FII/\([A-Za-z.-]*\)\./>.*$||'
morgel.dorgel
    
por 30.10.2013 / 13:16
0

Se você pode garantir uma tag (bem formada) por linha, faça:

sed 's/^.*>[ \t]*\([^ \t]\+\)[ \t]*<.*$//' your_file

Isso não verifica se FOO é repetido, como no seu exemplo. Para substituir apenas as instâncias de FOO que são repetidas no delimitador de tags de abertura e no corpo da tag, você pode usar isso:

sed 's@< *a *href *= *FII/\([-a-zA-Z.]\+\) *\./\?> * *< */ *a *>@@' your_file

O mesmo em Perl para melhor legibilidade:

perl -pe 's{
            < \s* a \s* href \s* = \s* FII/  # Constant part
               ([-a-zA-Z.]+)                 # Payload (saved in $1)
               \s*\./?\s*>                   # Optional space, ./ and >
               \s*\s*                      # Payload repeated
            <\s*/\s*a\s*>                    # Closing delimiter
           }{$1}x                            # Replace match with $1
' your_file
    
por 30.10.2013 / 12:36

Tags