标题确实说明了一切。基本上,我正在尝试压缩一个巨大的日志文件。
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