Bash 使用BSD对具有不可打印字符的行进行计数

Bash 使用BSD对具有不可打印字符的行进行计数,bash,macos,grep,bsd,Bash,Macos,Grep,Bsd,我试图在BSD样式的系统上整理文件中的一些坏数据,这意味着我在grep中没有-p选项。我有700万行数据,其中一个子集有一些奇怪的字符。如果在文件中选择“less”,您将看到如下内容: 290437430@89 9^@0333465@88 290348389@87 290342818@8^@ ^@来自一个非ASCII的错误字符,该字符在发送字符时由于串行行上的噪声而显示。这些行已损坏,我想计算损坏数据字符串的数量 如有任何建议,将不胜感激。根据切普纳的建议,在此处添加以下解决方案: grep

我试图在BSD样式的系统上整理文件中的一些坏数据,这意味着我在grep中没有-p选项。我有700万行数据,其中一个子集有一些奇怪的字符。如果在文件中选择“less”,您将看到如下内容:

290437430@89
9^@0333465@88
290348389@87
290342818@8^@
^@来自一个非ASCII的错误字符,该字符在发送字符时由于串行行上的噪声而显示。这些行已损坏,我想计算损坏数据字符串的数量


如有任何建议,将不胜感激。

根据切普纳的建议,在此处添加以下解决方案:

grep -c '\x00' Input_file
下面的2将只提供文字字符

如果您只想计算
@
,那么一个简单的
grep
也可以帮助您进行计算

grep -c "@"  Input_file
grep -c "\^@"  Input_file
或者在计算
^@
的情况下,以下内容可能会对您有所帮助

grep -c "@"  Input_file
grep -c "\^@"  Input_file

它们可能是不可打印字符的占位符,而不是文本
^@
,文件实际上不包含
^
@
^@
less
显示空字节的方式
grep-c$'\0'输入_文件
应该(假设
bash
)给出OP想要的计数。@chepner,谢谢,先生,现在在帖子中添加了您的建议。啊,更好了。根据
manre_格式
,您可以使用
\x00
匹配空字节;不需要贝壳技巧
grep-c'\x00'输入_文件
@chepner,完成二号船长,您给出的解决方案很好,先生,为我学习:)如果您在一条损坏的线路上使用
xxd
,您会得到什么?@123只需略过一部分,我有0x00、0x03、0x87等。