regex - 使用正则表达式通过命令行从二进制流中获取数据
问题描述
我有一个 hacky 的事情,我想通过命令行来做,因为我不想写一个程序来做这件事。对于某些背景,传感器只是发送简单地被 netcat 捕获的 UDP 数据包,nc -ul 192.168.1.1 10000 > output.dat
. 在此流中,偶尔会出现错误。我有一个来自传感器的二进制数据流,它偶尔会发送错误消息“$ERROR<binary for 129 bytes>”。
我想想出一些方法来解析这个错误消息,这样我就可以将匹配项通过管道传输到一个文件中。我相信正确的正则表达式是(\$ERROR).{129}
,但我没有实际实施它的运气。我一直在模拟数据流,cat file.bin | grep -aEi '(\$ERROR).{129}'
但它不起作用,因为我得到的字符多于错误消息。
我希望使用它来观看错误消息的流并将其重定向到文件。任何有关如何修复此正则表达式的建议将不胜感激。
解决方案
grep
本质上是一个面向行的工具。如果这 129 个字节可能包含空字节或你有什么,那么所有的赌注都没有;但也许试试
grep -zEo '$ERROR.{129}' file.bin
其中-z
选项是非标准的,并表示使用空字节而不是换行符作为“行”之间的分隔符;并且该-o
选项说只打印匹配项,而不是找到匹配项的整个“行”。
周围的括号$ERROR
没有任何用处,所以我把它们去掉了。
推荐阅读
- python - 有没有办法将天蓝色的 Eventhub 检查点存储到远程存储桶,例如谷歌云存储桶?
- c# - 通过 DataTableRequest 在数据表中搜索小数时是否存在已知问题?
- java - Java 8 Stream 如果不执行收集功能,则过滤和映射功能不起作用
- javascript - jQuery .val() 返回未定义
- c# - 有没有办法不定义一个设置器来使这个 odata PUT 调用工作?
- multithreading - pthread_cond_signal 不会立即解除阻塞 pthread_cond_wait 线程
- delphi - 有没有办法使用循环在 RichEdit 中以 1 行连续显示文本?
- bash - 如何从源文件列表中迭代并在我的磁盘驱动器上找到这些文件?我正在使用 FD 和 RIPGREP
- excel - 使用 Do While 优化 VBA 宏
- android - android - 忽略标头 X-Firebase-Locale,因为它的值为 null