有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何格式化和比较来自bash/vm的输入?

我正在开发一个桌面应用程序,它可以在虚拟机上分析一些东西。 在SSH连接之后,我开始写和读。 我将输入保存在一个临时的.txt文件中。现在我想将它与另一个.txt文件进行比较,它包含正确的amount/name目录。 例如,如果我想使用来自scanForVm的下面代码检查../workspace/上的目录。内容(实际上不仅仅是命令输出)保存到.txt文件中

我的问题是,它将一些不必要的内容写入其中,并且我无法将其与其他.txt文件进行比较

我花了几个小时试图寻找答案,并尝试了不同的方法

public void scanForVm(MouseEvent event) throws IOException, InterruptedException {
    if (event.getSource() == scanButton) {

        networkCheck.scanNetwork();
        sshConnection.connectionToSsh("ls -d workspace/*/\n");
        sshConnection.readOutput();
    }

}

然后:

public void readOutput() throws IOException, InterruptedException {

    Path file = Paths.get(" / path / To / Text.txt ");

    System.out.println(outputDescr); //Debug format
    InputStream stdout = new StreamGobbler(sess.getStdout());
    ByteArrayOutputStream result = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int read;
    String output = "";

    while ((read = stdout.read(buffer)) != -1) {
        result.write(buffer, 0, read);
        Files.write(file, buffer);
        Thread.sleep(2000);
        System.out.println(output);
    }
}

我希望来自vm的输入是实际可读的

现在我明白了:

添加的标识:

/path/path/path/.ssh/...
[0m[01;36mworkspace/directory/[0m                 [01;36mworkspace/directory2/[0m  
ls -d workspace/*/

我希望它只是:

workspace/directory/
workspace/directory2/

共 (1) 个答案

  1. # 1 楼答案

    [0m[01;36m是颜色标识符[0m表示没有颜色,[01;36m表示浅青色。可以使用类似\[(0|\d+;\d+)m的正则表达式解析它们

    在您的特定示例中,可以使用包含所需字符串的组1中的\[01;36m(.+?)\[0m来找到开始将颜色设置为浅青色并在结束时返回到标准的所有内容。您可以在这里测试:https://regex101.com/r/A906Na/1