Ad Widget

Collapse

regexp - мультистрочный поиск

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Whols
    Senior Member
    • Jul 2018
    • 133

    #1

    regexp - мультистрочный поиск

    Добрый день! Хочу уточнить. можно ли как-то получить кол-во вхождений в одном value выражения count?

    Code:
    count(//vfs.file.contents[/var/log/OpenVPN/openvpn-status.log],#1,"regexp","(?sx)2023$")
    В данном файле. к примеру. две строки с записями, имеющими окончание в виде текущего года. Проверка в онлайн-планировщике выдает оба вхождения (глобально). count ищет лишь до первого вхождения (как я понимаю, инлайн-модификатор /g не работает). Собсно, как то можно включить глобальный поиск?
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Функция count() не считает количество вхождений какой-то строки в текстовое значение. Она считает количество значений, удовлетворяющих заданным условиям.
    В данном случае у вас условия простые:
    • смотреть одно (последнее) значение (параметр "#1");
    • сравнивать его с регулярным выражением: совпадает или нет.
    Результат: да, это значение с таким регулярным выражением совпадает. Из всей выборки значений (одно последнее) таких значений (совпадающих) - одна штука. Поэтому результат такого выражения - единица.

    Если надо считать количество вхождений подстроки в одном значении, то я бы это делал с помощью дополнительного элемента данных, который был бы зависимым (dependent) от исходного (ссылка), и с помощью предобработки, например, на JavaScript (ссылка), считал бы нужное число.

    Comment

    • Whols
      Senior Member
      • Jul 2018
      • 133

      #3
      Originally posted by Kos
      Если надо считать количество вхождений подстроки в одном значении, то я бы это делал с помощью дополнительного элемента данных, который был бы зависимым (dependent) от исходного (ссылка), и с помощью предобработки, например, на JavaScript (ссылка), считал бы нужное число.
      Спасибо, создал зависимый элемент (чтo-то новенькое), но не силен в jawa. Нашел в сети что-то вида:
      Code:
      str.split(/\r\n|\r|\n/).length​
      Не пойму, как прикрутить это в синтаксис Zabbix?

      Comment

      • Whols
        Senior Member
        • Jul 2018
        • 133

        #4
        Все. разобрался. Зашло в виде:

        Code:
         return (value.split(/\r\n|\r|\n/).length - 1)
        Еще раз, благодарю за подсказку.

        Comment

        • Kos
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • Aug 2015
          • 3404

          #5
          Originally posted by Whols
          Спасибо, создал зависимый элемент (чтo-то новенькое), но не силен в jawa.
          Не пойму, как прикрутить это в синтаксис Zabbix?
          Там не Jawa, и даже не Java, а JavaScript.

          Сделать можно, например, примерно так (вставить этот код в поле для JavaScript в предобработке):
          Code:
          var array=value.split(/\r\n|\r|\n/);
          var result=0;
          for (i in array) {
            if (array[i].endsWith(2023))
              result++;
          }
          return result;​

          Comment

          Working...