Запросить все, что соответствует определенным критериям - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть журнал с тысячами различных событий и типов сообщений для запуска запроса, чтобы найти и заменить некоторые определенные данные, как здесь один из примеров событие 1

 "eventID": "Ar39084",
      "data2": "http://sfa.stanly.local:8787/nices-uri/msa/PRAS-             TAM80/root/BLA_Notification::LINKDOWN-ISA_NA-Ar39084~2F538
      "data3": "[excm][132.19][78.65][68493435][Ar39084]"
      "data4": "AGV.SDA.Ar39084"

событие 2

  "eventID": "Ar39079",
  "data2": "http://sfa.stanly.local:8787/nices-uri/msa/PRAS-TAM80/root/BLA_Notification::LINKDOWN-ISA_NA-Ar39079~2F538
  "data3": "[excm][132.19][78.65][68493435][Ar39079]"
  "data4": "AGV.SDA.Ar39079"

Итак, я хочу найти все, что относится к группе 1 в моем блокноте ++, поиск здесь - это мой запрос,

  "eventID": "(.*?)",  

Итак, я хочу, чтобы все, что соответствует содержимому группы идентификаторов eventID (Ar39084 и Ar39079), должно соответствовать данным data2, data 3, data 4 и т. Д., И этот запрос также может совпадать с событием 2, event 3 и т. Д.

Так что я могу иметь возможность заменить в журнале Ar39084 Ar39079 Ar394354 в любом месте и любую другую строку, которая соответствует запросу

Так что после применения замены мой лог может выглядеть так:

Событие 1

 "eventID": "${variable}",
      "data2": "http://sfa.stanly.local:8787/nices-uri/msa/PRAS-             TAM80/root/BLA_Notification::LINKDOWN-ISA_NA-${variable}~2F538
      "data3": "[excm][132.19][78.65][68493435][${variable}]"
      "data4": "AGV.SDA.${variable}"

Событие 2

  "eventID": "${variable}",
  "data2": "http://sfa.stanly.local:8787/nices-uri/msa/PRAS-TAM80/root/BLA_Notification::LINKDOWN-ISA_NA-${variable}~2F538
  "data3": "[excm][132.19][78.65][68493435][${variable}]"
  "data4": "AGV.SDA.${variable}"

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Попробуйте с этим:

Найти что: "eventID":\s*"\K(\w+)("[\s\S]*?)(?=\b\1\b)|\G(\w++)(?=(?:[^"](?!\3))*"\s+(?:"eventID"|\z))|\G(\w++)([\s\S]*?)(?=\b\4\b)

Заменить: \${variable}\2\5

У вас есть демо здесь .

Он должен работать с любым идентификатором, состоящим из букв, цифр и подчеркиваний, при условии, что вокруг него есть некоторая граница слов (что, по-видимому, соответствует вашему случаю)

0 голосов
/ 17 апреля 2019

Это должно помочь:

Я сделал группировку по (Ar\d+), чтобы найти Ar, а затем \d+ для любого количества цифр.

enter image description here

UPDATE

Исходя из вероятности возникновения других событий, начинающихся с чего-то, кроме простого Ar, группировка поиска регулярных выражений изменяется на:

([a-zA-Z]{2}\d{5,})  // 2 characters followed by 5 (or more) digits.

Это будет соответствовать событиям с именем:
Jm37908
Za94025
Sw02834
Pt012345678 (должно быть больше 5 цифр)
Плюс другие с похожими форматами

Вы можете попробовать регулярное выражение здесь .

...