lynx -dump
para converter o HTML em texto sem formatação e awk
para reformatar a saída, definindo o separador de campo para uma nova linha ( \n
) e o separador de registro para duas ou mais linhas novas ( \n\n+
).
A função sub()
chama no script awk
a remoção de espaços em excesso antes de imprimir a saída necessária.
$ lynx -dump ramp.html |
awk -v RS='\n\n' -F'\n' '/^[[:space:]]+/ {
sub(/^ +/,"",$1);
sub(/ +/," ",$2);
print $1":"$2
}'
Commodity Orgin: uerb45e001.material.com
Commodity Code & Dimension: 151151.15 Dim 90
Commodity Serial #: 2009081020
Client Name: Jack
Eu realmente não gosto de fazer isso porque nunca é uma boa ideia analisar XML ou HTML com expressões regulares . não funciona . Mesmo que você consiga ativá-lo de modo que pareça funcionar, ele é extremamente frágil e WILL quebra assim que o HTML ou XML muda o suficiente do que seus regexps estão procurando. Um analisador XML ou HTML real é a única coisa somente que pode fazer o trabalho corretamente.
Mas, com isso dito, aqui está algo que usa apenas sed
e fmt
, ferramentas que devem estar disponíveis em qualquer sistema semelhante a um unix:
$ sed -e '/<d[td]\|^[[:blank:]]*$/!d
s/<[^>]*>//g;
s/^ *//;
/^\(Commodity\|Client\)/ s/$/:/' ramp.html |
fmt |
sed -e '/^[[:blank:]]*$/d'
Commodity Orgin: uerb45e001.material.com
Commodity Code & Dimension: 151151.15 Dim 90
Commodity Serial #: 2009081020
Client Name: Jack
O primeiro script sed
exclui todas as linhas exceto linhas e linhas em branco contendo uma tag <DT>
ou <DD>
, depois remove todas as tags HTML da entrada, exclui espaços à esquerda e adiciona um :
ao final das linhas do nome do campo. A saída de sed
é então canalizada para fmt
para reformatar as linhas, depois para sed
novamente para excluir linhas em branco.
Isso é um hack e só é garantido que funcione exatamente na entrada de amostra que você forneceu. Qualquer coisa substancialmente diferente é susceptível de quebrar o roteiro. É o que acontece quando você usa expressões regulares para analisar qualquer HTML, exceto o mais trivial, ou XML.