Название говорит само за себя, на самом деле. По сути, я пытаюсь сжать огромный файл журнала.
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