tr -cd '[:space:]' < my_file | wc -m
Funcionaria. Mas com GNU tr
, isso só funcionaria em byte único por localidades de caracteres (normalmente, não em UTF-8) ou com entrada ASCII somente em locales UTF-8.
Sem as aspas em torno de [:space:]
, você receberia uma mensagem de erro em csh, tcsh ou zsh (a menos que a condição abaixo fosse atendida) e na maioria dos shells, isso falharia se houvesse um arquivo chamado :
, s
, p
, a
, c
ou e
no diretório atual, pois [:space:]
é um shell glob.
Observe também que wc
não conta caracteres por padrão (são bytes, palavras e novas linhas apenas quando não é dada nenhuma opção).
Com o GNU awk
, você pode usar:
awk -v RS='[[:space:]]' 'END{print NR}'
Exemplo:
$ printf 'tr -cd '[:space:]' < my_file | wc -m
\u2006\t\r\n' | awk -v RS='[[:space:]]' 'END{print NR}'
4