shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Salvar posts de determinados usuários em fóruns


From: Cristiano
Subject: Re: Salvar posts de determinados usuários em fóruns
Date: Fri, 09 Jul 2010 18:17:24 -0000
User-agent: eGroups-EW/0.82

--- Em address@hidden, José Paulo de Oliveira Petry <petrybr@...> escreveu
>
> Senhores,
> 
> Quero montar uma base de dados com os posts que determinados usuários
> fizeram em uma determinada thread de determinados fórums online.
> 
> ***
> Resumindo minha dificuldade:
> 
> Minha dificuldade: Separar as informações contidas entre duas tags
> específicas, ou seja:
> 
> Pegar o arquivo HTML e separar os posts (ou seja, pegar o que tiver entre o
> <table> </table>)
> Pegar dentro de cada post a data e hora do mesmo ( ou seja, pegar o que
> tiver entre as tags <!-- status icon and date --> e <!-- / status icon and
> date --> )
> Pegar dentro de cada post a mensagem propriamente dita ( ou seja, pegar o
> que tiver entre as tags <!-- message --> e <!-- / message --> )
> ***

Petry, boa tarde. O dia está corrido e confesso que não li todo o seu post. 
Parei onde você começa a contar a história.

Mas, se entendi pela parte cotada acima, a estrutura do seu arquivo é:

<table>
... talvez alguma coisa ...

<!-- status icon and date -->
... talvez outras coisas ...

<!-- message --> 
... texto da sua mensagem ...
<!-- / message --> 

... talvez mais outras coisas ...
<!-- / status icon and date -->

... talvez mais alguma coisa ...
</table>

Se for isso, para pegar tudo que existe entre 2 tags, sed é um bom caminho.

Vamos a um exemplo:

Considere a seguinte página da wikipedia:

http://tinyurl.com/2bk34lv

Suponha que eu salvei o código fonte dela no arquivo chamado 
'ponto_fusao.html'. Veja este código fonte aqui:

http://pastebin.com/hKUUFJ63

Então, se eu quero só a tabela com os pontos de fusão de cada elemento, preciso 
pegar tudo o que estiver dentro das tags <table> e </table>. 

Basta usar o de endereços e intervalo do sed:

sed -n '/<table.*>/,/<\/table>/p' ponto_fusao.html

No exemplo acima, a opção -n suprime a saída automática, sendo exibido apenas o 
que for explicitamente solicitado (comando p).

O sed pesquisa todas as linhas contidas no intervalo entre a primeira linha que 
coincidir com o que estiver dentro do primeiro grupo delimitado pela /, ou seja 
/<table.*>/, até a última linha que casar com o conteúdo do segundo grupo 
delimitado pela /, ou seja, <\/table>.

Neste segundo grupo, a contrabarra (\) serve para 'escapar' a barra normal (/) 
para que ela seja interpretada literalmente e não como o delimitador da 
pesquisa.

Em seguida, o comando p imprimi todo o que estiver neste intervalo.

Você pode usar este conceito para fazer sua pesquisa e, se desejar delimitar 
ainda mais, pegando apenas um 'sub-intervalo' dentro do seu intervalo, pode 
usar o limitadores { e } para executar um segundo bloco de comandos apenas 
dentro deste primeiro intervalo.

No seu caso, a pesquisa de um novo intervalo, dentro do intervalo localizado, 
conforme exemplo abaixo, que retornaria apenas a linha da tabela que contém o 
elemento 'Carbono':

sed -n '/<table.*>/,/<\/table>/{/Carbono/,/<\/tr>/p}' ponto_fusao.html

Se você testou o código acima, viu que a tag <tr> não foi listada, pois a 
instrução pedia para iniciar o intervalo pela linha que contém 'carbono'.

Não é a solução para o seu problema, mas é um caminho. Dá para melhor muito 
este código.

Na correia que está hoje, foi o que deu para arrumar.

Abraço


Cristiano




reply via email to

[Prev in Thread] Current Thread [Next in Thread]