有一些很好的答案可以解决从文件中删除空字符的问题 - 似乎sed可能是最有效的方法。但是,我能够找到的所有其他问题都不涉及查找空字符,而是删除它们。
有一些问题确实提供了有效的解决方案 - 但是,我很难找到一个不依赖于GNUisms的符合POSIX的解决方案。我看到的两个解决方案使用带有 -v 选项的 cat 和带有 -P 选项的 grep(两者都不支持(。
我养成了尽可能多地委托给 shell 的习惯,但 shell 在这里帮不了我,因为不可能在变量中存储空字符。外部工具是唯一的选择,但是当我遵守符合 POSIX 的选项时,我什至找不到使用它们的方法。
一种可能的方法是tr
和wc
:
[ "$(tr -cd ' ' < file | wc -c)" -ge 0 ]
或者,od
和grep
将允许停止第一个而不读取文件的其余部分:
od -A n -t x1 file | grep -q 00
使用tr -d ' 00'
将 null 修剪为临时文件,并使用wc -c
获取文件中的字符数。 如果临时文件与包含空值的原始文件不匹配(cmp -s
(,并且wc
的输出可用于计算空值的数量 - 问题的重点。
PS:grep -P
也不是POSIX。 在POSIX中也找不到-C
选项。