É possível que um comando detecte quando sua saída está indo para um TTY ou não. Assim, neste caso em particular, quando ls
detecta que sua saída não está indo para um TTY, ela se comporta como se -1
fosse passado como argumento.
Você pode ver isso, e que grep
não está fazendo nada de especial usando cat
:
ls | cat