¿Reemplazar varias instancias de la misma línea con una sola instancia?

¿Reemplazar varias instancias de la misma línea con una sola instancia?

El título lo dice, de verdad. Básicamente, estoy intentando condensar un archivo de registro enorme.

Notepad++ y Regex (lo sé un poco) pueden eliminar estas líneas repetitivas, pero el problema es que no quiero que se eliminen todas. Quiero que quede una instancia para preservar la estructura/orden de los mensajes de registro.

He buscado en Google muchas respuestas pero parece que solo obtengo resultados comoeste. El problema es que no solo intento reemplazar o excluir líneas.

En este punto, supongo que es más probable que Regex contenga una respuesta, pero todavía estoy en esa etapa en la que no sé qué herramientas están disponibles.

Editar:

Ejemplo de mensajes que tengo miles, pero solo necesito ver uno de ellos: (Veo toneladas de estos, porque cada dispositivo scsi quiere incluir su propio mensaje. Solo necesito ver que está sucediendo, no que está sucediendo a cada uno de ellos).

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

Pero quiero ver solo

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

Respuesta1

Si varias instancias son consecutivas, puedes hacer:

Actualización según nueva solicitud:

  • Ctrl+H
  • Encontrar que:^([^-]+- )(.+)(?:\R(?1)\2)+
  • Reemplazar con:$2
  • comprobar Envolver alrededor
  • comprobar expresión regular
  • NO VERIFICAR. matches newline
  • Replace all

Explicación:

^           : 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.

Reemplazo:

$2      : content of group 2

Resultado para el ejemplo dado:

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

Si las instancias múltiples no son consecutivas, será mejor que escriba un script en su lenguaje de scripting favorito.

Aquí hay un resumen de Perl que hace el trabajo:

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

información relacionada