tail -f에서 특정 키워드가있는 항목을 어떻게 필터링합니까?


답변:


58

grep 대신 awk를 사용하는 방법을 모르지만 이것은 나를 위해 작동합니다

tail -f file.log | grep -Ev '(ELB|Pingdom|Health)'

편집 :dmourati갈렙이 지적, 당신은 또한 사용할 수있는 egrep대신의 grep -E편의를 위해. 일부 시스템에서 이것은 동일한 바이너리에 대한 링크이며, 다른 시스템에서는 grep 패키지에서 제공 한 사본입니다. 어느 쪽이든 -E스위치 대신 사용할 수 있습니다. 그러나 GNU grep 매뉴얼 페이지에 따르면 :

[...]이 개 변형 프로그램 egrepfgrep사용할 수 있습니다. egrep와 동일합니다 grep -E. fgrep와 동일합니다 grep -F. 직접 호출 egrep또는 fgrep더 이상 사용되지 않지만이를 사용하는 히스토리 애플리케이션이 수정되지 않은 상태로 실행될 수 있도록 제공됩니다.

그것들은 동의어 명령이기 때문에 egrep이 전혀 없다면 기본 설정으로 내려갑니다. 그러나 앞으로 호환성을 위해 grep -E다른 방법은 공식적으로 사용되지 않으므로 구문 을 사용하는 것이 좋습니다 .


grep -E대신에 사용 egrep하면 중복 답변이 필요합니까?
Caleb

@ Caleb 나는 왜 안보이는 지 모르겠다. 고양이를 껍질을 벗기는 방법은 여러 가지가
있으며이

1
그렇습니다.하지만 기능적으로 겹치는 두 개의 서로 다른 프로그램이 아니라 서로에 대한 심볼릭 링크 일뿐입니다. 그래서 그것은 완전한 답변이 아닌 '부록'(읽기 : 주석)에 더 가깝지 않습니까? 나는 더 적은 범죄에 대한 공감대를 가졌습니다 ...
Marcin

@ DTest : 권리에 의해 dmourati는 실제로 몇 초 만에 펀치를 때렸습니다. 그가 추론을 설명하지는 않았지만 여기에서 약간의 크레딧을받을 가치가 있습니다. 우리 둘 다 들어 오기 전에 적어도 두 개의 공감대가 있었기 때문에 당신은 분명히 파티에 늦었다. 다르게 피부에 고양이를 원하는 사용하는 경우 sed, awk, perl, multitail또는 ninja_foo.
Caleb

1
@ DTest : 나는 원래 소스를 추가하기 위해 귀하의 답변을 크게 수정하는 자유를 얻었습니다. 향후 사용에는 -E가 권장되는 것처럼 보이므로이를 표시했지만 egrep이없는 배포판에 대한 메모는 제거했습니다. 언급 된 배포자는 egrep을 가지고 있으며 심볼릭 링크 대신 별도의 바이너리 일뿐입니다.
Caleb

21

필터링하려는 파이프로 구분 된 단어 목록을 사용하여 파이프를 연결하십시오.

tail -f log_file | egrep -v 'ELB|Pingdom|Health'

일치 목록 주위에 괄호를 사용하는 것은 선택 사항입니다. 이 때문에 |그렙 의해 논리 OR 연산자로 처리되어 그 서브 그룹의 여부의 일환으로 수행 할 것인지. '(ELB|Pingdom|Health)'정확히 동일하게 작동합니다. 어떤 경우에는 구문이 더 분명 할 수 있습니다. 괄호를 추가하지 않고 단일 일치 항목에서 가능한 일치 목록으로 전환 할 수 있으므로 입력하기가 더 쉽습니다.

추가적인 크레딧을 얻으 multitail려면 출력을 필터링 할 때 ninja foo를 수행하는 것이 좋습니다. 예를 들어 다음과 같이 단어를 필터링 할 수 있습니다.

multitail -e ELB -e Pingdom -e Health -f log_file

출력을 필터링하지 않고 색상을 지정하거나 강조 표시하는 데 사용할 수도 있습니다.

EDit : egrep이 더 이상 사용되지 않는 대체 방법 인 DTests 답변 과 설명을 참조하십시오 grep -E.


2
표현은 ( ")가 아닌 ( ')로
끝나서는 안

네, 오타였습니다. 스택 교환 사이트가 위키와 같은 기능을하므로 향후 참조를 위해 수정해야 할 종류입니다.
Caleb

편집 내용이 6 자 이상이어야한다고 생각 했습니까?
Sirex

높은 담당자가 없으면 예는 6 자 이상이지만이 경우 1자가 매우 중요합니다. 본문에 HTML 주석을 추가하여 변경을 강제 실행할 수 있습니다. 문자는 한도에 포함되며 변경하는 이유를 알 수 있습니다.
Caleb

감사 @Caleb 너무 많은 multitail 제안을 그 것이다 최고 ! 내가 없이는 내 인생에서 오랫동안 갔다고 믿을 수 없어.
sidewinderguy


3

이 정보를 왜 기록 하시겠습니까?

  • 보관 용으로 엄격합니까?
  • 로그 파일의 다른 키워드 또는 패턴에 따라 다른 스크립트를 조건부로 실행 하시겠습니까?

로그 파일의 내용에 따라 스크립트 동작을 수행하려면 Expect를 사용하여 필터링을 수행 할 수 있습니다. ( http://en.wikipedia.org/wiki/Expect ) Expect는 Tcl 확장이지만 Python 버전의 Expect도 있습니다.

Expect는 입력 스트림에 존재하는 상태 또는 패턴에 따라 조건에 따라 다른 동작을 지정할 수있는 이처럼 유연한 유연한 스위치 식 설명을 제공합니다. 예를 들면 다음과 같습니다.

expect {  
    "password:" {  
        send "password\r"  
    } 
    "yes/no)?" {  
        send "yes\r"  
        set timeout -1  
    }  
    timeout {  
        exit  
    }   
    -re . {  
        exp_continue  
    }  
    eof {  
        exit  
    }  
}

따라서 expect 문에서 패턴을 지정하고 다른 동작을 지정하고 모든 것을 루프로 감싸고 입력의 일부를 다른 파일에 쓰거나 완전히 삭제하는 매우 강력한 필터를 쉽게 작성할 수 있습니다. 입력 내용에 따라 조치를 취하고 다른 스크립트를 실행하십시오.

따라서 로그 파일을 필터링하거나 로그 입력에 대해 조치를 취하거나 보관상의 이유로 왜 로그 파일을 필터링하려고합니까?


내가 오래 전에 사용하고 완전히 잊어 버린 Expect에 대한 참조를위한 하나입니다.
MPi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.