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.