在bash上从二进制文件中删除菱形问号

Mul*_*tut 1 linux bash

我动态写入一个串口输入的文件,如下所示:sudo cu -s 19200 -l/dev/ttyUSB0> serialContent.json

但是当我打开它时,它会向我显示很多钻石问号:

*#*1 ##*1*0*702442501#9 ##*1*0*702442501# 9 ##

我想得的只是这一部分:*#*1 ##*1*0*702442501#9 ##*1*0*702442501#9 ##

当我用vim打开文件时,我得到了很多^ @字符.

我尝试使用sed的| [^ @] || g'serialContent.json> serialContent2.json和sed的| [ ] || g'serialContent.json> serialContent2.json替换字符,但没有运气.

这是我用这个命令得到的:

$ file -bi serialContent.json
application/octet-stream; charset=binary
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能删除这些标记?谢谢!

tha*_*guy 7

当您有不可打印的数据时,这是显示的替换字符.

要删除所有不可打印的字符,您可以通过tr -cd '[:print:]'以下方式管道:

sudo cu -s 19200 -l /dev/ttyUSB0 | tr -cd '[:print:]' > serialContent.json
Run Code Online (Sandbox Code Playgroud)

什么是可打印的取决于您的区域设置.您可能希望export LC_ALL=C首先确保跨机器的一致结果.