Com sed, você pode fazer isso:
$ cat inf
<tr>
<td >441</td>
<td >S</td>
<td >0,74</td>
</tr>
$ sed ':a;N;s/\n//;ta' inf
<tr> <td >441</td> <td >S</td> <td >0,74</td> </tr>
que faz isso:
-
:a
faz uma etiqueta
-
N
anexará a linha atual ao buffer, permitindo assim o próximo comando
-
s/\n//
irá substituir a nova linha do comando anterior por nada, assim efetivamente juntando as linhas
-
ta
é "goto: a"
Uma maneira mais fácil é usar tr
:
$ cat inf
<tr>
<td >441</td>
<td >S</td>
<td >0,74</td>
</tr>
$ cat inf|tr -d '\n'
<tr> <td >441</td> <td >S</td> <td >0,74</td> </tr>
onde -d '\n'
significa "excluir nova linha".
EDIT: Não entendi o que você quer. Se você quiser processar vários dos grupos acima em um fluxo de entrada, veja o que você pode fazer com sed
:
$ cat inf
foo
baz
<tr>
<td >441</td>
<td >S</td>
<td >0,74</td>
</tr>
fizz
buzz
<tr>
<td >441</td>
<td >S</td>
<td >0,74</td>
</tr>
tomato
potato
$ sed -r '/<tr/{:a;N;s/[\t\n]//g;/<\/tr/!ba}' inf
foo
baz
<tr><td >441</td><td >S</td><td >0,74</td></tr>
fizz
buzz
<tr><td >441</td><td >S</td><td >0,74</td></tr>
tomato
potato
Como outros já mencionaram, você pode fazer isso de uma forma um pouco mais legível com awk
ou perl
ou python, mas observe uma coisa - o regexp não é poderoso o suficiente para analisar HTML ou XML. Veja este para uma boa discussão:
Espero que isso ajude.