Se você quiser o nome do link:
sed 's@^<a href[^>]*>\([^<]*\)</a>$@@'
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 ~]
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
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
Tags sed