Примерно так с sed
работает:
parse.sed
1r header
/^-/ {
s/- //
s/://
h
}
G
s/ *([^:]+): ([^\n]+)\n(.*)/ <tr>\n <td>\3<\/td>\n <td>\1<\/td>\n <td><a href="\2">Download<\/a><\/td>\n <\/tr>/p
$r footer
Где заголовок и нижний колонтитул содержат:
заголовок
<table>
<thead>
<tr>
<th>type</th>
<th>ver</th>
<th>link</th>
</tr>
</thead>
<tbody>
нижний колонтитул
</tbody>
</table>
Запустить так:
sed -Enf parse.sed infile
Вывод с 3 разделами в файле :
<table>
<thead>
<tr>
<th>type</th>
<th>ver</th>
<th>link</th>
</tr>
</thead>
<tbody>
<tr>
<td>soft1</td>
<td>V1.0.1</td>
<td><a href="http://example.com/v1.0.1.zip">Download</a></td>
</tr>
<tr>
<td>soft1</td>
<td>V1.0.2</td>
<td><a href="http://example.com/v1.0.2.zip">Download</a></td>
</tr>
<tr>
<td>soft1</td>
<td>V1.0.3</td>
<td><a href="http://example.com/v1.0.3.zip">Download</a></td>
</tr>
<tr>
<td>soft1_beta_ver</td>
<td>V1.0.1</td>
<td><a href="http://example.com/v1.0.1.zip">Download</a></td>
</tr>
<tr>
<td>soft1_beta_ver</td>
<td>V1.0.2</td>
<td><a href="http://example.com/v1.0.2.zip">Download</a></td>
</tr>
<tr>
<td>soft1_beta_ver</td>
<td>V1.0.3</td>
<td><a href="http://example.com/v1.0.3.zip">Download</a></td>
</tr>
<tr>
<td>soft1_alpha_ver</td>
<td>V1.0.1</td>
<td><a href="http://example.com/v1.0.1.zip">Download</a></td>
</tr>
<tr>
<td>soft1_alpha_ver</td>
<td>V1.0.2</td>
<td><a href="http://example.com/v1.0.2.zip">Download</a></td>
</tr>
<tr>
<td>soft1_alpha_ver</td>
<td>V1.0.3</td>
<td><a href="http://example.com/v1.0.3.zip">Download</a></td>
</tr>
</tbody>
</table>