Seu comando grep estava dando muitas correspondências porque grep usa Expressões regulares básicas , que não dão significado especial a \r - estava contando as ocorrências da letra "r".
tr faz reconhecer \n e \r , para que possa encontrar todas as correspondências e deixar wc -c contá-las byte por byte:
tr -d -c '\n\r' < file.txt | wc -c
Mas, como o arquivo também pode conter finais de linha do Windows / DOS ( \r\n ), eles seriam contados duas vezes. Você precisará de uma etapa adicional para converter quaisquer fins de linha no estilo DOS em um dos outros formulários e, em seguida, contar caracteres individuais de fim de linha como antes:
sed 's/\r$//' file.txt | tr -d -c '\n\r' | wc -c
Infelizmente, sed nem sempre reconhece \r . Talvez seja necessário usar outra maneira de especificar um retorno de carro, como o próprio escape do shell, o comando echo ou colocar o script sed em um arquivo.