Недопустимый синтаксис escape-символов Logstash Ruby

#ruby #logstash

Вопрос:

Я должен анализировать такие журналы с помощью ruby:

 test = "LogicalDiskC:% Free Space=40.04815, LogicalDiskC:Free Megabytes=32606, LogicalDiskE:% Free Space=91.81561, LogicalDiskE:Free Megabytes=18802, LogicalDiskF:% Free Space=n/a, LogicalDiskF:Free Megabytes=n/a, LogicalDiskHarddiskVolume1
 

Но дает мне эту ошибку:

 main.rb:2: Invalid escape character syntax
test = "LogicalDiskC:% Free Space=40.04815, Logic
                     ^
 

Эти журналы извлекаются с помощью logstash из БД, я не могу использовать gsub для замены недопустимых символов , потому что в момент, когда ruby читает строку, возникает ошибка, и на этом останавливаюсь.

что я могу сделать, чтобы решить эту проблему?

Комментарии:

1. Я не уверен, что понимаю-если вы читаете из файла, это не проблема. Если вы просто тестируете, правильно экранируйте тестовую строку.

2. Я не могу избежать, что это строка, которая исходит из базы данных, полученная с помощью logstash

3. Если вы читаете строки из базы данных или файла, вам ничего не нужно делать. Причина, по которой у вас возникли проблемы, заключается в том, что вы создаете свою собственную строку, а не избегаете ее.

Ответ №1:

Я не уверен, что полностью понимаю ваш вариант использования, но если вы делаете что-то вроде ручного копирования и вставки непосредственно из одного места в свой код Ruby, вы можете определить свою строку, используя ввод с разделителями, как это:

 string= %q{LogicalDiskC:% Free Space=40.04815, LogicalDiskC:Free Megabytes=32606, LogicalDiskE:% Free Space=91.81561, LogicalDiskE:Free Megabytes=18802, LogicalDiskF:% Free Space=n/a, LogicalDiskF:Free Megabytes=n/a, LogicalDiskHarddiskVolume1 }.strip
 

То, что вы делаете, — это определяете строку, используя фигурные скобки в качестве разделителей вместо использования кавычек. Основная проблема с вашим примером-это обратная косая черта, которая отменит заключительную цитату, когда Ruby попытается преобразовать ее в строку. Чтобы справиться с этим, я поместил конечное пространство внутри разделителей, а затем просто убрал его, используя метод полосы. Вы также можете дополнительно добавить вторую обратную косую черту, чтобы отменить первую.