O motivo file.txt está vazio depois que o comando é a ordem em que o shell faz as coisas. A primeira coisa que acontece com essa linha é o redirecionamento. O arquivo "file.txt" é aberto e truncado para 0 bytes. Depois disso, o comando sed é executado, mas no momento em que o arquivo já está vazio.
Existem algumas opções, a maioria envolve a gravação em um arquivo temporário.
sed '1d' file.txt > tmpfile; mv tmpfile file.txt # POSIX
sed -i '1d' file.txt # GNU sed only, creates a temporary file
perl -ip -e '$_ = undef if $. == 1' file.txt # also creates a temporary file