제목에서 알 수 있듯이 정말 그렇습니다. 기본적으로 나는 거대한 로그 파일을 압축하려고 합니다.
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