>

이것 .

로그는 다음과 같습니다 :

[09:44:22] [main] ERROR [url/location] - A ONE LINE ERROR
[09:44:22] [main] ERROR [url/location] - Another ERROR 
[09:44:22] [main] SOMETHING DIFFERENT
[09:44:22] [main] SOMETHING DIFFERENT AGAIN
[09:44:22] [main] WARN [url/location] - ANOTHER ONE LINE WARN

줄간에 빈 줄이없는 줄 바꿈. 때때로 특정 조각에 대한 추가 정보가있을 때 들여 쓰기가 있습니다.

ERROR 가 포함 된 모든 줄을 당기고 싶습니다  (이상적으로 ERROR 를 가져올 수있는 스크립트로  그리고/또는 FAIL WARN 등)에 따라 파라미터에 따라 표시합니다. 실패에 대한 로그를 선별하고 훨씬 쉽게 만들 수 있습니다.


  • 답변 # 1

    로그 파일이 다음과 같다고 생각하십니까?

    example.log :

    [09:44:22] [main] ERROR [url/location] - A ONE LINE ERROR
    [09:44:22] [main] ERROR [url/location] - A MULTI LINE ERROR 
        with whitepace indention
    [09:44:22] [main] ERROR [url/location] - A MULTI LINE ERROR 
           with tab indention
    [09:44:22] [main] SOMETHING DIFFERENT
    [09:44:22] [main] SOMETHING DIFFERENT
           with tab indention
    [09:44:22] [main] WARN [url/location] - ANOTHER ONE LINE WARN
    
    

    한 줄짜리와 펄은 아니지만, 일을해야한다 :

    logsifter.pl :

    #!/usr/bin/perl
    use warnings;
    use strict;
    my $buffer="";
    while(my $line= <>){
      chomp $line;
      if($line=~/ERROR|INFO|WARN/){
        print "$buffer\n" if $buffer;
        $buffer = $line;
      }
      elsif($line=~/^\s+(.*)$/){
        $buffer .= $1 if $buffer;
      }
      else{
        if($buffer){
          print "$buffer\n";
          $buffer ="";
        }
      }
    }
    print "$buffer\n";
    
    

    처럼 부르세요 :

    perl logsifter.pl < example.log
     [09:44:22] [main] ERROR [url/location] - A ONE LINE ERROR
     [09:44:22] [main] ERROR [url/location] - A MULTI LINE ERROR with whitepace indention
     [09:44:22] [main] ERROR [url/location] - A MULTI LINE ERROR with tab indention
     [09:44:22] [main] WARN [url/location] - ANOTHER ONE LINE WARN
    
    

  • 답변 # 2

    GNU grep  아주 간단하게 할 수 있습니다. man grep 에서 :

    와이즈 비즈

    Two regular expressions may be joined by the infix operator |; the resulting regular expression matches any string matching either subexpression.

    grep "ERROR\|FAIL\|WARN" /path/to/example.log   egrep 를 벗어날 필요가 없습니다.  기호.

    |
    
    

  • 답변 # 3

    이제 데이터 형식이 정해지면 대답이 훨씬 간단 해집니다 : egrep "ERROR|FAIL|WARN" /path/to/example.log  this를 위해 제작되었습니다.

    grep 로 사용

    와이즈 비즈   grep '<PATTERN>' <dataFile> 입니다  또는 <PATTERN>

    나와 @murphy이 여전히 데이터 형식에 대한 잘못된 가정을 가지고있을 때 아래 답변이 작성되었습니다 :

    다음은오류만 검색하는 한 줄 awk 프로그램입니다.

    SearchWORD1

    이를 매개 변수로 유연한 쉘 함수로 만들 수 있습니다 :

    SearchW1\|SearchW2
    
    

    awk '/ERROR/{a=1;print} /^ / || /^\t/ {if (a) print;next} !/ERROR/ {a=0}' 로 실행 또는 searchlog(){ awk -f <( echo " /$1/{a=1;print} /^ /||/^\t/{if (a) print;next} ! /$1/{a=0} "); } .

    다른 응답자가 "추측 한"예시 데이터 형식의 결과는 다음과 같습니다.

    LogData_generated_by_program | searchlog <PATTERN>
    
    
    searchlog <PATTERN> < File_containing_Log_Data

  • 이전 process - 주어진 PID가 실행 중인지 어떻게 확인해야합니까?
  • 다음 linux - 저장 성능 테스트