Eu não posso ter 100% de certeza desde que você não tenha nos mostrado o que está fazendo, mas eu estou supondo que você simplesmente não está citando suas variáveis. Por exemplo, dado este arquivo:
$ cat file
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
foo|bar|baz|
Se você executar seu comando e salvar a saída em uma variável, as novas linhas serão salvas. No entanto, se eles são impressos ou não, depende de como você imprime a variável:
$ var=$(sed 's/.$//' file | sort)
$ echo $var ## bad
foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz foo|bar|baz
$ echo "$var" ## good
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz
foo|bar|baz
Quando você usa uma variável sem aspas, invoca o operador split + glob que dividirá a variável em caracteres na variável $IFS
. Por padrão, esse é o espaço, a nova linha e a guia:
$ printf '%s' "$IFS" | od -c
0000000 \t \n
0000003
Citando a variável protege de split + glob, que é uma das razões pelas quais você deve sempre citar suas variáveis . Para mais detalhes sobre o porquê, consulte Implicações de segurança de esquecer de citar uma variável em shells bash / POSIX .