Se você quiser usar o Perl para isso, você pode usar sua função chomp
:
perl -pe chomp
Mais alguns detalhes, para quem estiver interessado.
Você pode passar um ou mais nomes de arquivo como argumentos subseqüentes.
perl -pe chomp file1 file2 file3
Em alguns casos, talvez você não queira fazer isso , mas você pode redirecionar ou redirecionar para esse comando. (Essas habilidades - e essa limitação - também se aplicam a qualquer outra solução baseada em perl -p
ou perl -n
.)
Então, se você quiser processar a saída da execução some-command
:
some-command | perl -pe chomp
Isso é potencialmente mais rápido que o comando Perl na resposta de terdon . Caracteres newline (representados por \n
) só aparecem no final das linhas nessa situação - porque eles são o que Perl está usando para decidir onde cada linha termina. s/\n//
pesquisa a linha inteira para novas linhas, enquanto chomp
apenas remove a linha no final (se houver, pois a última linha pode ou não ter uma).
O desempenho pode não ser o principal motivo para preferir chomp
. O comando perl
na resposta de terdon seria apenas um pouco mais lento, a menos que você esteja processando um arquivo enorme com linhas muito longas. E se você precisa de velocidade, o caminho de David Foerster ainda é provavelmente mais rápido. O chomp
é, no entanto, exatamente a ferramenta certa para isso, se você estiver usando Perl, e eu acho que a intenção de chomp
é mais clara do que a de s/\n//
. Em última análise, provavelmente não há uma resposta objetiva sobre qual é o melhor.
Imprimindo uma nova linha final.
No entanto, eu recomendo contra o uso de substituição de comando ( $(
)
) apenas para garantir que uma nova linha seja impressa. A menos que o texto que você está processando seja curto, é provável que seja bem lento - ele precisa coletar todo o texto de uma só vez e depois imprimi-lo - e torna seu comando mais difícil de entender. Em vez disso, você pode fazer como David Foerster sugeriu e executar echo
ou printf '\n'
depois.
perl -pe chomp; echo
Se você estiver canalizando de ou (como mostra David Foerster) redirecionando de esse comando, você pode colocá-lo em {
;}
para que o saída de ambos os comandos é tomada em conjunto. Se você está apenas imprimindo no terminal, você pode executá-lo exatamente como mostrado acima. Isso funciona mesmo se você estiver canalizando ou redirecionando para o comando, porque echo
/ printf '\n'
realmente não lê nenhuma entrada. Ou seja, isso funciona:
some-command | perl -pe chomp; echo
Enquanto aqui você não pode simplesmente remover o {
;}
:
{ perl -pe chomp; echo; } | some-other-command
Ou, se preferir, você pode fazer perl
imprimir a nova linha final em si. Como incluir os comandos perl
e echo
em {
;}
, essa abordagem funciona mesmo se você estiver canalizando ou redirecionando de (e, como todos abordagens, isso funciona quando você está canalizando para , também):
perl -wpe 'chomp; END { print "\n" }'
Observe que o comando in terdon's answer funciona bem com esses métodos de impressão da nova linha final também. Por exemplo:
perl -pe 's/\n//'; echo
perl -pe 's/\n//; END { print "\n" }'