Как отформатировать и сравнить ввод с bash/vm?

Я работаю над настольным приложением, которое будет анализировать некоторые вещи на виртуальной машине. Я могу писать и читать после 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);
    }
}

Я хочу, чтобы ввод из виртуальной машины был действительно читаемым.

Теперь я получаю это:

Добавлена ​​идентификация:

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

И я хочу, чтобы это было только:

workspace/directory/
workspace/directory2/
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме