【问题标题】:How to search binary data in target directory?如何在目标目录中搜索二进制数据?
【发布时间】:2021-05-03 15:16:35
【问题描述】:

我试过ag和其他一些搜索器,它们只支持在二进制文件中搜索普通文本,但不支持在二进制文件中搜索二进制文本。

我用谷歌搜索“搜索二进制文本”,结果都在谈论“在二进制文件中搜索文本”。

有没有工具支持search_tool -bin "313233"这样的搜索? (实际上是搜索包含字符串“123”的文件)

【问题讨论】:

    标签: search full-text-search binaryfiles binary-search binary-data


    【解决方案1】:

    让我们构建自己的 POSIX 兼容工具:

    搜索工具:

    od -An -tx1 "$1" | tr -cd '[:xdigit:]' | grep -qF "$2"
    

    这会以十六进制转储文件,删除非十六进制数字,然后搜索结果。

    $ chmod +x search_tool
    $ ./search_tool somefile 313233
    $ echo $?
    0
    

    somefile 包含123


    您可以使用 find(1) 在任何目录中运行 search_tool:

    $ find java_playground ! -type d -a -exec search_tool {} 313233 \; -print
    

    search_tool 必须位于PATH 中。

    【讨论】:

    • 几件事:1)寻求工具推荐是结束问题的理由。 2)您说“任何工具支持” 3)您没有在问题中说明非功能性要求。 4)这完全取决于实现。 5)此答案满足问题中所述的功能要求。
    • 谢谢,但我的意思是搜索目录中的文件,而不是单个文件,例如“ag”、“grep”...
    • 给定 search_tool,我想你会有自己的机制来为目录中的文件执行它。也不能保证其他工具也能提供该功能。无论如何,我提供了一种符合 POSIX 标准的方法。
    【解决方案2】:

    在不了解您的要求的情况下,这应该足以满足大多数情况:

    grep -robUaP "{YOUR_BINARY_SEQUENCE_HERE_IN_HEX_FORMAT}" {DIRECTORY_TO_SEARCH}
    

    例子:

    grep -robUaP "\x01\x02\x03" /bin
    

    基于:Binary grep on Linux?

    【讨论】:

      【解决方案3】:

      我刚刚用 Golang 写了一个,简单但有效。

      https://github.com/aj3423/bingrep

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        相关资源
        最近更新 更多