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