Se eu estivesse fazendo isso com frequência, estaria usando a análise XPath por meio de algo como a gema Nokogiri para Ruby.
No entanto, aqui está algo que poderia funcionar, mas sem um script bash para combiná-los exigirá algumas etapas por arquivo (acho que são 20 no seu caso).
Passo 1: Converta o html linha por linha, tanto quanto possível, para que o awk possa processá-lo.
Começando com a entrada html do seu comentário em car.html
, eu fiz
cat car.html | awk -F"> " '{ for( i = 1; i <= NF; i++ ) printf( "%s>\n", $i ) } ' > new.html
que me deu um arquivo new.html
como
<table>
<tr><td width="90">
<div class="car_photo">
<div class="space">
<img src="../photos/veh5.jpeg">
</div>
</div>
</div>
</td>
<td align="right" class="car_details" width="400">
<table>
<tr>
<td class="line_bottom" width="190">
<div class="text_left">32325</a>
</div>
</td>
</tr>
</table>
<div class="line_bottom">
Make: </div>
<div class="line_bottom">Model: <br>Year: <br />
</div>
</td>
<td class="car_details" width="400">
<div class="line_bottom">Mileage:</div>
<div class="line_bottom">Oil Change: </div>
<div class="line_bottom">Registration:</div>
<br>
</td>
</tr>
</table>
Passo 2: Pegue o arquivo e coloque-o em um script awk que eu coloquei em seu próprio arquivo chamado awko
#!/usr/bin/awk -f
BEGIN { FS=">" }
$1 ~ /<table/ { table_cnt++ }
$1 ~ /<\/table/ { table_cnt-- }
table_cnt > 0 {
for( i = 1; i <= NF; i++ ) {
split( $i, arr, "<" )
if( length( arr[ i ] ) > 0 )
printf( "%s\n", arr[ 1 ] )
}
}
executando isso como
awko new.html
me deu um resultado como:
32325
Make:
Model:
Mileage:
Oil Change:
Registration:
A saída no awko
pode ser modificada para criar uma saída com estilo CSV, para facilitar a importação para um banco de dados. E novamente, essas etapas diferentes poderiam ser combinadas em um script de shell para o "levantamento de nome de arquivo pesado" em um loop apropriado, mas eu não tenho tempo para isso agora.
awko
está essencialmente procurando o que é o texto de cada linha com o início / fim que você especificou.
Opa. Eu só notei que esta pergunta é antiga. Oh, bem, cometer essa resposta de qualquer maneira.