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 楼答案
[0m
和[01;36m
是颜色标识符[0m
表示没有颜色,[01;36m
表示浅青色。可以使用类似\[(0|\d+;\d+)m
的正则表达式解析它们在您的特定示例中,可以使用包含所需字符串的组1中的
\[01;36m(.+?)\[0m
来找到开始将颜色设置为浅青色并在结束时返回到标准的所有内容。您可以在这里测试:https://regex101.com/r/A906Na/1