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

标签 java bash file input output

我正在开发一个桌面应用程序,它将分析虚拟机上的一些内容。 在 SSH 连接后我可以进行写入和读取。 我将输入保存在临时 .txt 文件中。现在我想将它与另一个包含正确目录数量/名称的 .txt 文件进行比较。 例如,如果我想使用 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);
    }
}

我希望来自虚拟机的输入是实际可读的。

现在我明白了:

添加身份:

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

我希望它只是:

workspace/directory/
workspace/directory2/

最佳答案

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

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

关于java - 如何格式化和比较来自 bash/vm 的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56475072/

相关文章:

ruby - 如何在 Ruby 中创建 root 拥有的文本文件?

Perl 在 Windows 中使用外来字符

java - tomcat部署后的文本文件位置

java - 如何根据给定的主题类型初始化复杂对象模型的属性?

Bash 命令替换 + 参数扩展

linux - Swift - 读取管道输入

bash - 使用 youtube-dl 从 channel 下载新视频

java - 命令行参数丢失?

java - 有没有办法在不重新打开的情况下去除框架装饰?

java - 如何获取上一个URL页面?引荐来源网址不起作用