Как отформатировать и сравнить входные данные из Bash / VM? - PullRequest
0 голосов
/ 06 июня 2019

Я работаю над настольным приложением, которое будет анализировать некоторые вещи на виртуальной машине.Я могу писать и читать после соединения SSH.Я сохраняю данные во временном .txt файле.Теперь я хочу сравнить его, скажем, с другим .txt файлом, который содержит правильные amount/name каталогов.Например, если я хочу проверить каталоги на ../workspace/ с моим кодом ниже от scanForVm.Содержимое (на самом деле не только вывод команды) сохраняется в .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 Ответ

0 голосов
/ 06 июня 2019

[0m и [01;36m - идентификаторы цвета. [0m означает отсутствие цвета, [01;36m означает светло-голубой. Они могут быть проанализированы с помощью регулярных выражений типа \[(0|\d+;\d+)m.

В вашем конкретном примере все, что начинается с установки цвета на светло-голубой и обратно на Стандартный в конце, может быть найдено с помощью \[01;36m(.+?)\[0m с группой 1, содержащей желаемую строку. Вы можете проверить это здесь: https://regex101.com/r/A906Na/1

...