Некоторые опции:
tr -cd '\0' | wc -c
tr '\n\0' '\0\n' | wc -l # Generic approach for processing NUL-terminated
# records with line-based utilities (that support
# NUL characters in their lines like GNU ones).
grep -cz '^' # GNU grep
sed -nz '$=' # recent GNU sed, no output for empty input
awk -vRS='\0' 'END{print NR}' # not all awk implementations
Обратите внимание, что для входа, который содержит данные после последнего NUL символа (или непустой вход без NUL символов), подходы tr
всегда будут считать количество NUL символов, но подходы awk
/sed
/grep
будут считать лишнюю запись для этих лишних байтов.
с Perl
:
perl -0ne 'END {print $.}'
или:
perl -nle 'print scalar split "\0"'
или:
perl -nle 'print scalar unpack "(Z*)*", $_'
Лучший метод, который я смог подумать, используется GREP -ZC '. *'
. Это работает, но чувствует себя неправильно использовать GREP с узором, который будет соответствовать чему-либо.