Para contar o número de bytes (como wc -c
)
< file LC_ALL=C tr -c '\n' '[\n*]' | grep -c '^'
Para contar o número de caracteres de nova linha (como wc -l
):
< file LC_ALL=C tr -cd '\n' | grep -c '^'
Para palavras (como wc -w
), assumindo tr
compatível com POSIX como o FreeBSD (não o GNU) e assumindo que o arquivo não contém sequências de bytes ilegais:
< file tr -cs '[:space:]' '[x*]' | tr -cs x '[\n*]' | grep -c x
Para caracteres (como wc -m
), mesmas restrições:
< file tr -c '\n' '[\n*]' | grep -c '^'
Na saída de:
printf '< file LC_ALL=C tr -c '\n' '[\n*]' | grep -c '^'
foo\u2006and \r\fbar\nbaz'
Eles dão respectivamente 20, 1, 4, 18, como wc
em um sistema FreeBSD em um locale en_GB.UTF-8.