Se
cat file1.txt | sed '/^\s*$/d' > file2.txt
funciona, mas
cat file1.txt | sed '/^[0-9].*[0-9]$/d' > file2.txt
não (embora se espere que funcione como o primeiro);
considerando que o arquivo de entrada pode incluir retornos de carro do Windows, então pode ser mais seguro usar este comando:
cat file1.txt | sed '/^[0-9].*[0-9][$\r]/d' > file2.txt
Isso deve funcionar em todos os casos, incluindo linhas que terminam com o retorno de carro do Linux ou do Windows.