Название говорит об этом, правда. В основном я пытаюсь сжать огромный файл журнала.

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

Я гугл много ответа , но я , кажется , только , чтобы получить результаты , как это. Проблема в том, что я не просто пытаюсь заменить или исключить строки.

На данный момент, я думаю, Regex с большей вероятностью найдет ответ, но я все еще на той стадии, когда не знаю, какие инструменты доступны.

Редактировать:

Пример сообщений, которых у меня тысячи, но мне нужно увидеть только одно:(Я вижу тонны таких сообщений, потому что каждое устройство scsi хочет встроить свое собственное сообщение. Мне нужно только увидеть, что это происходит, а не то, что это происходит с каждым из них).

multipathd[4893]: 3600a098000badf6800005dfe5a8cd2cd: sdie - rdac checker reports path is down: ctlr is in startup sequence multipathd[4893]: 3600a098000badf6800005def5a8cd273: sdgq - rdac checker reports path is down: ctlr is in startup sequence multipathd[4893]: 3600a098000badf6800005df05a8cd27b: sdeq - rdac checker reports path is down: ctlr is in startup sequence multipathd[4893]: 3600a098000bae10c00005df55a8cd2ec: sdgw - rdac checker reports path is down: ctlr is in startup sequence multipathd[4893]: 3600a098000bae10c00005df05a8cd2c2: sdfk - rdac checker reports path is down: ctlr is in startup sequence multipathd[4893]: 3600a098000bae10c00005dec5a8cd2a3: sdgm - rdac checker reports path is down: ctlr is in startup sequence multipathd[4893]: 3600a098000badf6800005df35a8cd292: sdfo - rdac checker reports path is down: ctlr is in startup sequence

Но я хочу видеть только

rdac checker reports path is down: ctlr is in startup sequence

1 ответ1

2

Если несколько экземпляров являются последовательными, вы можете сделать:

Обновление в соответствии с новым запросом:

  • Ctrl+H
  • Найти что: ^([^-]+- )(.+)(?:\R(?1)\2)+
  • Заменить на: $2
  • проверить обернуть
  • проверьте регулярное выражение
  • НЕ ПРОВЕРИТЬ . matches newline
  • Заменить все

Объяснение:

^           : beginning of line
  (         : start group 1
    [^-]+-  : 1 or more NOT dash,then a dash and a space
  )         : end group 1
  (         : start group 2
    .+      : 1 or more any character
  )         : end group 2
  (?:       : start non capture group 
    \R      : any kind of linebreak
    (?1)    : same pattern than group 1 (ie. "[^-]+- ")
    \2      : backreference to group 2
  )+        : end non capture group, must appears 1 or more times.

Замена:

$2      : content of group 2

Результат для данного примера:

rdac checker reports path is down: ctlr is in startup sequence

Если несколько экземпляров не являются последовательными, лучше написать сценарий на вашем любимом языке сценариев.

Вот Perl One-Liner, который делает эту работу:

perl -aE 'chomp;(undef,$x)=split(/-/,$_);next if exists $s{$x};$s{$x}=1;say$x' inputfile

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .