O título diz isso, realmente. Basicamente, estou tentando condensar um arquivo de log enorme.
Notepad++ e Regex (eu sei um pouco) podem excluir essas linhas repetitivas, mas o problema é que não quero que todas sejam excluídas. Quero que uma instância permaneça para preservar a estrutura/ordem das mensagens de log.
Pesquisei muitas respostas no Google, mas só pareço obter resultados comoesse. O problema é que não estou apenas tentando substituir ou excluir linhas.
Neste ponto, acho que é mais provável que Regex tenha uma resposta, mas ainda estou naquele estágio em que não sei quais ferramentas estão disponíveis.
Editar:
Exemplo de mensagens das quais tenho milhares, mas só preciso ver uma delas: (vejo muitas delas, porque cada dispositivo scsi deseja inserir sua própria mensagem. Só preciso ver se está acontecendo, não se está acontecendo para cada um deles).
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
Mas eu quero ver apenas
rdac checker reports path is down: ctlr is in startup sequence
Responder1
Se várias instâncias forem consecutivas, você pode fazer:
Atualização de acordo com nova solicitação:
- Ctrl+H
- Encontre o que:
^([^-]+- )(.+)(?:\R(?1)\2)+
- Substituir com:
$2
- confira Envolver
- verifique expressão regular
- NÃO VERIFIQUE
. matches newline
- Replace all
Explicação:
^ : 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.
Substituição:
$2 : content of group 2
Resultado para determinado exemplo:
rdac checker reports path is down: ctlr is in startup sequence
Se as instâncias múltiplas não forem consecutivas, é melhor escrever um script em sua linguagem de script favorita.
Aqui está um one-liner perl que faz o trabalho:
perl -aE 'chomp;(undef,$x)=split(/-/,$_);next if exists $s{$x};$s{$x}=1;say$x' inputfile