동일한 라인의 여러 인스턴스를 단 하나의 인스턴스로 바꾸시겠습니까?

동일한 라인의 여러 인스턴스를 단 하나의 인스턴스로 바꾸시겠습니까?

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

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

관련 정보