Shell: 如何正确判断一个文件是否包含一个或多个空字符?

Shell: How can I posixly determine if a file contains one or more null characters?

有一些很好的答案可以解决从文件中删除空字符的问题 - sed 似乎是最有效的方法。但是,我能够找到的所有其他问题都与查找空字符无关,而是与删除空字符有关。

有些问题确实提供了有效的解决方案 - 但是,我很难找到不依赖 GNUisms 的 POSIX 兼容解决方案。我见过的两个解决方案都使用带有 -v 选项的 cat 和带有 -P 选项的 grep(都不支持)。

我养成了尽可能多地委托给 shell 的习惯,但是 shell 在这里帮不了我,因为不可能在变量中存储空字符.外部工具是唯一的选择,但当我坚持使用符合 POSIX 的选项时,我什至找不到使用它们的方法。

一种可能的方法是 trwc:

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

或者,odgrep 将允许在第一个文件上停止而不读取文件的其余部分:

od -A n -t x1 file | grep -q 00

使用tr -d '[=10=]0'将trim空值写入临时文件,使用wc -c获取文件中的字符数。如果临时文件与包含空值的原始文件不匹配(cmp -s),则 wc 的输出可用于计算空值的数量——问题的重点。

p.s.: grep -P 也不是 POSIX。在 POSIX.

中也找不到 -C 选项