標題說的是真的。基本上我正在嘗試壓縮一個巨大的日誌檔案。
Notepad++和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