Você quer novas linhas. Então, crie novas linhas.
while read in; do sigtool --hex-dump "$in"; echo; done < file.txt > test.txt
Observe o comando echo adicionado.
Lembre-se, o primeiro lugar que eu verificaria seria a página sigtool man para ver se há uma opção para gerar novas linhas finais.
Ok, escrevi o acima sem realmente obter sigtool (do pacote clamav ) e testando-o. Agora eu fiz isso.
O código que você escreveu não funciona, pelo menos não com o clamav-0.99.2-3.el6.x86_64. sigtool aceita entrada em sua entrada padrão. Não tem opção de aceitar e traduzir argumentos de linha de comando.
Então, o que você realmente quer é voltar ao antigo editor não visual favorito ex :
printf '%s\n' 'g/^/.!tr -d \n | sigtool --hex-dump' %p | ex file.txt > test.txt
Demonstração:
$ cat file.txt
string1
string2
string3
$ printf '%s\n' 'g/^/.!tr -d \n | sigtool --hex-dump' %p | ex file.txt > test.txt
$ cat test.txt
737472696e6731
737472696e6732
737472696e6733
$
Explicação:
Globalmente (para cada linha correspondente a regex /^/ , que é toda linha), filtre cada linha ( .! ) através do pipeline de shell tr -d \n | sigtool --hex-dump e imprima ( p ) o buffer inteiro ( % ) à saída padrão e não salve as alterações em file.txt .
Outra abordagem, usando o Awk:
awk -v p='sigtool --hex-dump' '
{printf "%s", $0 | p; close(p); printf "\n"}
' file.txt > test.txt