我正在开发一个桌面应用程序,它将分析虚拟机上的一些内容。
在 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/