Заменить несколько экземпляров одной и той же строки только одним экземпляром?

Заменить несколько экземпляров одной и той же строки только одним экземпляром?

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

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

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

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

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

Объяснение:

^           : 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, который выполняет эту работу:

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

Связанный контент