Оболочка: Как я могу точно определить, содержит ли файл один или несколько нулевых символов? - PullRequest
0 голосов
/ 24 мая 2018

Есть несколько хороших ответов, которые касаются удаления нулевых символов из файла - кажется, что sed - это, вероятно, самый эффективный способ.Однако все остальные вопросы, которые мне удалось найти, касаются не поиска нулевых символов, а их удаления.

Существуют определенные вопросы, которые действительно дают правильные решения, однако у меня возникают трудности с поиском POSIX-совместимогорешение, которое не опирается на GNUisms.Два решения, которые я видел в этой работе, используют cat с опцией -v и grep с опцией -P (ни одно из которых не будет поддерживаться).

Я делаю привычкой делегировать как можно большеоболочка, но оболочка мне здесь не поможет, потому что невозможно сохранить нулевой символ в переменной.Внешние инструменты - единственный вариант, но я даже не могу найти способ с ними, когда придерживаюсь POSIX-совместимых опций.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Используйте tr -d '\000', чтобы обрезать нули во временный файл, и используйте wc -c, чтобы получить количество символов в файле.Если временный файл не соответствует (cmp -s) оригиналу, содержащему нули, и вывод из wc может быть использован для вычисления количества нулей - смысл вопроса.

ps: grep -P тоже не POSIX.Также в POSIX не найдена опция -C.

0 голосов
/ 24 мая 2018

Один из возможных способов: tr и wc:

[ "$(tr -cd '\0' < file | wc -c)" -ge 0 ]

В качестве альтернативы, od и grep позволят остановиться на первом без чтения остальной части файла:

od -A n -t x1 file | grep -q 00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...