Discussion:
[shell-script] Extração de dados em HTML
andrelucio.fc@yahoo.com [shell-script]
2017-05-09 20:41:38 UTC
Permalink
Opa, Pessoal.


Gostaria de uma ajuda de vocês na seguinte questão.


Eu possuo um estrutura html e preciso extrair a "user.default" e o IP (10.255.x.x/16) que está 4 linhas
abaixo.


A extração deve fica da seguinte forma: user.default 10.255.0.1.


Utilizei o sed -n '/user.default/,/10.255./p' index.html com grep e tr mas não ficou da maneira ideal.


Alguém tem uma sugestão melhor.


Segue abaixo um trecho da estrutura:


<tr id="r:server1:200.1.2.1:443">
<td class="listr">
user.client1 </td>
<td class="listr">
200.1.2.1:443 </td>
<td class="listr">
10.255.0.92 </td>
<td class="listlr">
Mon May 8 19:35:27 2017 </td>
</tr>


<tr id="r:server1:200.1.2.2:443">
<td class="listr">
user.default </td>
<td class="listr">
200.1.2.2:443 </td>
<td class="listr">
10.255.1.158 </td>
<td class="listlr">
Tue May 9 09:20:01 2017 </td>
</tr>


<tr id="r:server1:200.1.2.3:443">
<td class="listr">
user.client2 </td>
<td class="listr">
200.1.2.3:443 </td>
<td class="listr">
10.255.0.253 </td>
<td class="listlr">
Mon May 8 11:37:03 2017 </td>
</tr>


<tr id="r:server1:200.1.2.4:443">
<td class="listr">
user.default </td>
<td class="listr">
200.1.2.4:443 </td>
<td class="listr">
10.255.1.54 </td>
<td class="listlr">
Tue May 9 09:19:52 2017 </td>
</tr>








<tr id="r:server1:200.1.2.111:443">
<td class="listr">
user.client1 </td>
<td class="listr">
200.1.2.1:443 </td>
<td class="listr"><a href="http://10.255.0.92"
target="_blank">10.255.0.92</a></td>
<td class="listr">
Tue May 9 02:16:06 2017 </td>
<td class="listr">
248 KB </td>
<td class="listr">
251 KB </td>
<td class="listr iconcell"><a
id="i:server1:200.1.2.111:443"
title="Kill client connection from 200.1.2.111:443"
onclick="killClient('server1', '200.1.2.111:443');"><i
class="fa fa-fw fa-times-circle"
style="color: red; width: 1em;"></i></a></td>
</tr>



<tr id="r:server1:200.1.2.22:443">
<td class="listr">
user.default </td>
<td class="listr">
200.1.2.22:443 </td>
<td class="listr"><a href="http://10.255.1.161"
target="_blank">10.255.1.161</a></td>
<td class="listr">
Tue May 9 09:20:01 2017 </td>
<td class="listr">
37 KB </td>
<td class="listr">
37 KB </td>
<td class="listr iconcell"><a
id="i:server1:200.1.2.22:443"
title="Kill client connection from 200.1.2.22:443"
onclick="killClient('server1', '200.1.2.22:443');"><i
class="fa fa-fw fa-times-circle"
style="color: red; width: 1em;"></i></a></td>
</tr>



<tr id="r:server1:200.1.2.23:443">
<td class="listr">
user.client2 </td>
<td class="listr">
200.1.2.23:443 </td>
<td class="listr"><a href="http://10.255.1.192"
target="_blank">10.255.1.192</a></td>
<td class="listr">
Tue May 9 05:11:00 2017 </td>
<td class="listr">
163 KB </td>
<td class="listr">
163 KB </td>
<td class="listr iconcell"><a
id="i:server1:200.1.2.23:443"
title="Kill client connection from 200.1.2.23:443"
onclick="killClient('server1', 200.1.2.23:443');"><i
class="fa fa-fw fa-times-circle"
style="color: red; width: 1em;"></i></a></td>

</tr>
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-05-09 20:53:12 UTC
Permalink
Experimente fazer um lynx -dump no site. Se os dados estiverem vindo da
entrada primária (stdin), use lynx -dump -stdin

Abcs,
Julio

*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by ***@yahoo.com [shell-script]
Opa, Pessoal.
Gostaria de uma ajuda de vocês na seguinte questão.
Eu possuo um estrutura html e preciso extrair a "user.default" e o IP
(10.255.x.x/16) que está 4 linhas
abaixo.
A extração deve fica da seguinte forma: user.default 10.255.0.1.
Utilizei o sed -n '/user.default/,/10.255./p' index.html com grep e tr mas
não ficou da maneira ideal.
Alguém tem uma sugestão melhor.
<tr id="r:server1:200.1.2.1:443">
<td class="listr">
user.client1 </td>
<td class="listr">
200.1.2.1:443 </td>
<td class="listr">
10.255.0.92 </td>
<td class="listlr">
Mon May 8 19:35:27 2017 </td>
</tr>
<tr id="r:server1:200.1.2.2:443">
<td class="listr">
user.default </td>
<td class="listr">
200.1.2.2:443 </td>
<td class="listr">
10.255.1.158 </td>
<td class="listlr">
Tue May 9 09:20:01 2017 </td>
</tr>
<tr id="r:server1:200.1.2.3:443">
<td class="listr">
user.client2 </td>
<td class="listr">
200.1.2.3:443 </td>
<td class="listr">
10.255.0.253 </td>
<td class="listlr">
Mon May 8 11:37:03 2017 </td>
</tr>
<tr id="r:server1:200.1.2.4:443">
<td class="listr">
user.default </td>
<td class="listr">
200.1.2.4:443 </td>
<td class="listr">
10.255.1.54 </td>
<td class="listlr">
Tue May 9 09:19:52 2017 </td>
</tr>
<tr id="r:server1:200.1.2.111:443">
<td class="listr">
user.client1 </td>
<td class="listr">
200.1.2.1:443 </td>
<td class="listr"><a href="http://10.255.0.92"
target="_blank">10.255.0.92</a></td>
<td class="listr">
Tue May 9 02:16:06 2017 </td>
<td class="listr">
248 KB </td>
<td class="listr">
251 KB </td>
<td class="listr iconcell"><a
id="i:server1:200.1.2.111:443"
title="Kill client connection from 200.1.2.111:443"
onclick="killClient('server1', '200.1.2.111:443');"><i
class="fa fa-fw fa-times-circle"
style="color: red; width: 1em;"></i></a></td>
</tr>
<tr id="r:server1:200.1.2.22:443">
<td class="listr">
user.default </td>
<td class="listr">
200.1.2.22:443 </td>
<td class="listr"><a href="http://10.255.1.161"
target="_blank">10.255.1.161</a></td>
<td class="listr">
Tue May 9 09:20:01 2017 </td>
<td class="listr">
37 KB </td>
<td class="listr">
37 KB </td>
<td class="listr iconcell"><a
id="i:server1:200.1.2.22:443"
title="Kill client connection from 200.1.2.22:443"
onclick="killClient('server1', '200.1.2.22:443');"><i
class="fa fa-fw fa-times-circle"
style="color: red; width: 1em;"></i></a></td>
</tr>
<tr id="r:server1:200.1.2.23:443">
<td class="listr">
user.client2 </td>
<td class="listr">
200.1.2.23:443 </td>
<td class="listr"><a href="http://10.255.1.192"
target="_blank">10.255.1.192</a></td>
<td class="listr">
Tue May 9 05:11:00 2017 </td>
<td class="listr">
163 KB </td>
<td class="listr">
163 KB </td>
<td class="listr iconcell"><a
id="i:server1:200.1.2.23:443"
title="Kill client connection from 200.1.2.23:443"
onclick="killClient('server1', 200.1.2.23:443');"><i
class="fa fa-fw fa-times-circle"
style="color: red; width: 1em;"></i></a></td>
</tr>
andrelucio.fc@yahoo.com [shell-script]
2017-05-09 21:31:18 UTC
Permalink
Opa, Mestre Júlio.

Infelizmente eu só consigo utilizar o wget nesse sistema.
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-05-10 02:26:00 UTC
Permalink
entao faca o wget ≪site ≫ | lynx -dump -stdin
estou numa smart tv
Post by ***@yahoo.com [shell-script]
Opa, Mestre Júlio.
Infelizmente eu só consigo utilizar o wget nesse sistema.
--
Enviado de celular. Desculpe-me pela falta de acentos e erros de digitacao.
andrelucio.fc@yahoo.com [shell-script]
2017-05-09 21:36:50 UTC
Permalink
Opa, Mestre Julio.

Infelizmente eu só consigo usar o wget nesse sistema.
Fernando Mercês nandu88@gmail.com [shell-script]
2017-05-09 22:36:34 UTC
Permalink
E um html2text, rola? :-)


Att,

@MercesFernando
mentebinaria.com.br <http://www.mentebinaria.com.br>
---------------------------
Post by ***@yahoo.com [shell-script]
Opa, Mestre Julio.
Infelizmente eu só consigo usar o wget nesse sistema.
Alfredo Casanova atcasanova@gmail.com [shell-script]
2017-05-09 22:45:22 UTC
Permalink
Cola essa saída aí num pastebin da vida, tá mto mal formatado na lista
Post by Fernando Mercês ***@gmail.com [shell-script]
E um html2text, rola? :-)
Att,
@MercesFernando
mentebinaria.com.br <http://www.mentebinaria.com.br>
---------------------------
Post by ***@yahoo.com [shell-script]
Opa, Mestre Julio.
Infelizmente eu só consigo usar o wget nesse sistema.
andrelucio.fc@yahoo.com [shell-script]
2017-05-10 16:57:58 UTC
Permalink
Opa, Mercês.

Só é possível utilizar ele via browser ou existe algum cmd pra ele?
itamarnet@yahoo.com.br [shell-script]
2017-05-09 22:51:26 UTC
Permalink
Caro Andre

Se não pode usar um dos browsers em modo texto ou html2text,
talvez possa usar com awk:

awk '/user\./ {printf $0;for(i=1;i<=4;i++) getline; print}' arquivo.html | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//;s/<[^>]*>//g;s/[[:blank:]]\{2,\}/ /g'

ou sed:

sed -n '/user\./{N;N;N;N;s/\n//g;p}' arquivo.html | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//;s/<[^>]*>//g;s/[[:blank:]]\{2,\}/ /g'

Foi isso que entendi, isso serve?

[]'s
Itamar
Janduy Euclides janduyeuclides@googlemail.com [shell-script]
2017-05-10 11:22:43 UTC
Permalink
Bom dia a todos,

Itamar eu por curiosidade aqui no meu CentOS fiz o teste usando esse awk
que mandou com o exemplo do nosso amigo andre deu certo \0/.

Resultado:

* user.client1 200.1.2.1:443 <http://200.1.2.1:443>*
Abs,


*Atenciosamente,*

<https://br.linkedin.com/in/janduyeuclides>
Post by ***@yahoo.com.br [shell-script]
Caro Andre
Se não pode usar um dos browsers em modo texto ou html2text,
awk '/user\./ {printf $0;for(i=1;i<=4;i++) getline; print}' arquivo.html |
sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//;s/<[^>]*>//g;s/[[:blank:]]\{2,\}/
/g'
sed -n '/user\./{N;N;N;N;s/\n//g;p}' arquivo.html | sed
's/^[[:blank:]]*//;s/[[:blank:]]*$//;s/<[^>]*>//g;s/[[:blank:]]\{2,\}/ /g'
Foi isso que entendi, isso serve?
[]'s
Itamar
itamarnet@yahoo.com.br [shell-script]
2017-05-10 13:56:20 UTC
Permalink
Caro Janduy

Leve mais em consideração a construção em si do script, pois o resultado não é exatamente o que o Andre quer.


Mas como a entrada fornecida parece estar desconfigurada por ser postada no fórum diretamente, não tive certeza se o arquivo tinha essa estrutura que consegui ver.


Se substituir o 4 por 8 no for verá um resultado mais próximo que o Andre procura, mas com umas sujeiras adicionais, que acredito não estarem no arquivo original.
Talvez tenha que fazer uma pipe com sed 's/target=.*> //' para ajustar essas sujeiras.


O sed enviado também tomou o mesmo cuidado, e para ter um resultado mais próximo, apenas aumente a quantidade de "N" até 8 ou 9 ( não lembro ao certo ) e depois faça um pipe com cut -f 1,3 -d ' ' e terá algo mais perto do que ele quer.


É apenas um paliativo


[]'s
Itamar
Janduy Euclides janduyeuclides@googlemail.com [shell-script]
2017-05-10 14:00:45 UTC
Permalink
Entendi Itamar,

Joia depois eu faça um teste sim.

Valeu!



*Atenciosamente,*

<https://br.linkedin.com/in/janduyeuclides>
Post by ***@yahoo.com.br [shell-script]
Caro Janduy
Leve mais em consideração a construção em si do script, pois o resultado
não é exatamente o que o Andre quer.
Mas como a entrada fornecida parece estar desconfigurada por ser postada
no fórum diretamente, não tive certeza se o arquivo tinha essa estrutura
que consegui ver.
Se substituir o 4 por 8 no for verá um resultado mais próximo que o Andre
procura, mas com umas sujeiras adicionais, que acredito não estarem no
arquivo original.
Talvez tenha que fazer uma pipe com sed 's/target=.*> //' para ajustar essas sujeiras.
O sed enviado também tomou o mesmo cuidado, e para ter um resultado mais
próximo, apenas aumente a quantidade de "N" até 8 ou 9 ( não lembro ao
certo ) e depois faça um pipe com cut -f 1,3 -d ' ' e terá algo mais perto
do que ele quer.
É apenas um paliativo
[]'s
Itamar
andrelucio.fc@yahoo.com [shell-script]
2017-05-10 17:09:30 UTC
Permalink
Opa, pessoal, primeiramente muito obrigado pela ajuda.

A solução dada pelo phfbettega funcionou perfeitamente.


Trouxe somente os dados que preciso. Só preciso entender melhor o sed rs.


Resultado esperado:
user.default 10.255.1.158
user.default 10.255.1.54
user.default 10.255.1.161


Trecho do código no pastebin:


https://pastebin.com/kWaDgWaW https://pastebin.com/kWaDgWaW
phfbettega@yahoo.com.br [shell-script]
2017-05-11 05:06:10 UTC
Permalink
É um esqueleto de loop. Aprendi o loop no livro do Aurelio, como unir todas as
linhas de um arquivo numa linha só.
http://aurelio.net/sed/livro/

Opção -n inibe a impressão, o sed só vai imprimir com o comando p.
Opção -r para expressões regulares avançadas.

sed -nr '
# Aplique os comandos entre chaves apenas nas linhas que contenham /user\.default/
/user\.default/ {

# Define a marcação 'a'.
:a

# Aqui outro endereço.
# Quando achar uma linha que contenha /10\.255/, pule para a marcação 'fim'.
# O pulo é indicado pelo comando 'b'.
/10\.255/ b fim

# O sed só vai executar o comando 'N' se a linha não casar com o endereço /10\.255/.
# O comando 'N' coloca um '\n' no fim do conteúdo do espaço padrão e lê a próxima linha
# do arquivo no espaço padrão.
N
# Aqui é o ponto em que o sed vai carregando linha por linha no espaço padrão (a cada
# passagem do loop) com um '\n' entre as linhas.
# Enquanto uma linha não casar com o endereço /10\.255/ (que pula para o 'fim'),
# o espaço padrão vai enchendo.
# O comando 'b' pula para a marcação 'a' lá no começo das chaves.
b a

# Quando o sed chega nessa marcação é porque sofreu o desvio do endereço /10\.255/.
:fim

# Aqui o espaço padrão tem somente uma linha formada com as linhas lidas pelo 'N'
# separadas por '\n', daí é só pegar o que interessa com os grupos e substituir
# todo o espaço padão pelos retrovisores. O 'p' é um modificador do comando 's' que
# imprime o espaço padrão se a substituição ocorreu.
s/(user\.default).*(10\.255[.0-9]+).*/\1 \2/p
}'

Abraços Paulo
Post by ***@yahoo.com [shell-script]
Opa, pessoal, primeiramente muito obrigado pela ajuda.
A solução dada pelo phfbettega funcionou perfeitamente.
Trouxe somente os dados que preciso. Só preciso entender melhor o sed rs.
user.default 10.255.1.158
user.default 10.255.1.54
user.default 10.255.1.161
https://pastebin.com/kWaDgWaW
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
phfbettega@yahoo.com.br [shell-script]
2017-05-09 23:25:49 UTC
Permalink
Olá andrelucio, veja se esse sed ajuda
sed -nr '/user\.default/ {:a;/10\.255/b fim;N;ba;:fim s/(user\.default).*(10\.255[.0-9]+).*/\1 \2/p}'
Abraços Paulo
Post by ***@yahoo.com [shell-script]
Opa, Pessoal.
Gostaria de uma ajuda de vocês na seguinte questão.
Eu possuo um estrutura html e preciso extrair a "user.default" e o IP (10.255.x.x/16) que está 4 linhas
abaixo.
A extração deve fica da seguinte forma: user.default 10.255.0.1.
Utilizei o sed -n '/user.default/,/10.255./p' index.html com grep e tr mas não ficou da maneira ideal.
Alguém tem uma sugestão melhor.
<tr id="r:server1:200.1.2.1:443">
<td class="listr">
user.client1</td>
<td class="listr">
200.1.2.1:443</td>
<td class="listr">
10.255.0.92</td>
<td class="listlr">
Mon May 8 19:35:27 2017</td>
</tr>
<tr id="r:server1:200.1.2.2:443">
<td class="listr">
user.default</td>
<td class="listr">
200.1.2.2:443</td>
<td class="listr">
10.255.1.158</td>
<td class="listlr">
Tue May 9 09:20:01 2017</td>
</tr>
<tr id="r:server1:200.1.2.3:443">
<td class="listr">
user.client2</td>
<td class="listr">
200.1.2.3:443</td>
<td class="listr">
10.255.0.253</td>
<td class="listlr">
Mon May 8 11:37:03 2017</td>
</tr>
<tr id="r:server1:200.1.2.4:443">
<td class="listr">
user.default</td>
<td class="listr">
200.1.2.4:443</td>
<td class="listr">
10.255.1.54</td>
<td class="listlr">
Tue May 9 09:19:52 2017</td>
</tr>
<tr id="r:server1:200.1.2.111:443">
<td class="listr">
user.client1</td>
<td class="listr">
200.1.2.1:443</td>
<td class="listr"><a href="http://10.255.0.92"
target="_blank">10.255.0.92</a></td>
<td class="listr">
Tue May 9 02:16:06 2017</td>
<td class="listr">
248 KB</td>
<td class="listr">
251 KB</td>
<td class="listr iconcell"><a
id="i:server1:200.1.2.111:443"
title="Kill client connection from 200.1.2.111:443"
onclick="killClient('server1', '200.1.2.111:443');"><i
class="fa fa-fw fa-times-circle"
style="color: red; width: 1em;"></i></a></td>
</tr>
<tr id="r:server1:200.1.2.22:443">
<td class="listr">
user.default</td>
<td class="listr">
200.1.2.22:443</td>
<td class="listr"><a href="http://10.255.1.161"
target="_blank">10.255.1.161</a></td>
<td class="listr">
Tue May 9 09:20:01 2017</td>
<td class="listr">
37 KB</td>
<td class="listr">
37 KB</td>
<td class="listr iconcell"><a
id="i:server1:200.1.2.22:443"
title="Kill client connection from 200.1.2.22:443"
onclick="killClient('server1', '200.1.2.22:443');"><i
class="fa fa-fw fa-times-circle"
style="color: red; width: 1em;"></i></a></td>
</tr>
<tr id="r:server1:200.1.2.23:443">
<td class="listr">
user.client2</td>
<td class="listr">
200.1.2.23:443</td>
<td class="listr"><a href="http://10.255.1.192"
target="_blank">10.255.1.192</a></td>
<td class="listr">
Tue May 9 05:11:00 2017</td>
<td class="listr">
163 KB</td>
<td class="listr">
163 KB</td>
<td class="listr iconcell"><a
id="i:server1:200.1.2.23:443"
title="Kill client connection from 200.1.2.23:443"
onclick="killClient('server1', 200.1.2.23:443');"><i
class="fa fa-fw fa-times-circle"
style="color: red; width: 1em;"></i></a></td>
</tr>
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
Loading...