You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java或Linux命令检测分散在多行含十六进制文本中的指定SQL查询

检测分散在多行十六进制文本中的SQL语句

Linux命令解决方案

核心思路是先提取每行末尾的ASCII显示内容,拼接成完整字符串后再搜索目标SQL:

# 定义目标SQL的正则匹配式(替换空格为通配符适配显示中的点)
TARGET_SQL="select.*from.*ignTestt1"

# 提取ASCII内容、拼接、搜索
cat your_input_file.txt | awk '{print $NF}' | tr -d '\n' | grep -qi "$TARGET_SQL" && echo "目标SQL存在" || echo "目标SQL不存在"

命令说明

  • awk '{print $NF}':提取每行最后一列的ASCII显示区域(示例中每行末尾的16字符段)
  • tr -d '\n':将所有行的ASCII内容拼接成单行字符串
  • grep -qi "$TARGET_SQL":忽略大小写搜索目标正则,-q静默执行只返回状态码
  • 最后通过&&/||输出结果

如果需要严格匹配空格(比如显示中空格未被替换为点),可以将正则调整为select[ .]*from[ .]*ignTestt1,匹配空格或点作为分隔符。

Java解决方案

通过读取文件每行内容,提取ASCII显示区域并拼接,再用正则匹配目标SQL:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class SqlChecker {
    public static void main(String[] args) throws Exception {
        if (args.length == 0) {
            System.err.println("请传入目标文件路径");
            return;
        }
        
        List<String> lines = Files.readAllLines(Paths.get(args[0]));
        StringBuilder fullAscii = new StringBuilder();
        
        for (String line : lines) {
            int lastSpacePos = line.lastIndexOf(' ');
            // 确保提取到有效的ASCII段
            if (lastSpacePos != -1 && lastSpacePos < line.length() - 1) {
                fullAscii.append(line.substring(lastSpacePos + 1));
            }
        }
        
        // 目标SQL正则,适配显示中的空格转点情况
        String targetPattern = "select.*from.*ignTestt1";
        boolean isFound = fullAscii.toString().matches(".*" + targetPattern + ".*");
        
        System.out.println(isFound ? "目标SQL存在" : "目标SQL不存在");
    }
}

代码说明

  • 读取目标文件所有行,遍历每行提取最后一个空格后的ASCII显示内容
  • 将所有ASCII段拼接为完整字符串
  • 使用正则表达式匹配目标SQL,.*适配中间的点(原空格)或其他可能的分隔
  • 输出检测结果

内容的提问来源于stack exchange,提问作者Chinmay Gogte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:08:10