2012-05-25 5 views
1

나는 중요한 중요 이벤트를 표시하는 날짜 - 시간 스탬프가있는 수천 개의 로그 파일을 가지고 있습니다. 불행히도 주어진 날짜 - 시간 스탬프에 기록 된 정보에는 때로는 개행 문자가 삽입되어 정보가 여러 줄에 걸쳐 표시됩니다. 또한, 날짜 - 시간 스탬프가없는 제 목적과 관련이없는 다른 정보가 있습니다.펄 라이너, regexes 사이의 라인을 champing해야합니다

내가 밖으로 원하는 정보 당기는 작업 수행 펄 한 줄이있어

:

perl -ne 'print if /^\d\d:\d\d:\d\d\.\d\d\d/..!/^\d\d:\d\d:\d\d\.\d\d\d/' 

는 그러나, 나는 초기 줄 끝에서 새로운 라인 문자를 제거 할 (즉 포함 날짜 - 시간 스탬프)와 다음의 각 라인. 그러나 나는 마지막 줄 뒤에 날짜 - 시간 스탬프로 시작하는 다음 줄 앞에 줄 바꿈 문자를 유지하려고한다.

이것을 달성하기 위해 내선을 수정하는 방법에 대해 행운이 없습니다.

+1

처리 할 로그의 샘플을 표시하십시오. 나는 당신이 잘못된 발로 시작했기 때문에 다른 접근법이 필요하다는 것을 알고 있습니다. 당신은 정보가 여러 줄에 걸쳐 퍼져 있다고 말합니다. * 그러나이 문장은 타임 스탬프가 붙은 줄 뒤에 한 줄만 인쇄합니다. – Borodin

+0

한 줄자는 플립 플롭 연산자를 사용합니다.이 연산자는 행이 regex1과 일치하면 true가되고 다른 행이 regex2와 일치하면 false가됩니다. –

답변

1
perl -ne 'if ($inside = /^\d\d:\d\d:\d\d\.\d\d\d/..!/^\d\d:\d\d:\d\d\.\d\d\d/) { 
      chomp unless $inside =~ /E0$/; 
      print; }' 
+0

완벽! 고맙습니다. –

+0

@phileas 여러분, 천만입니다. 그 유용성이 그 고향을 극복하게되어 기쁘다. –