grep이 적나요?

grep이 적나요?

현재 몇 가지 문제를 찾기 위해 익숙하지 않은 로그를 많이 살펴보고 있습니다. 내가 본 첫 번째 파일은 Events.log였으며 less서로 다른 시간에 동일한 이벤트를 표시하는 것처럼 보이는 페이지가 최소 3개 이상 있었습니다. 해당 이벤트는 상당히 괜찮아 보였습니다. 이 이벤트를 필터링하고 싶습니다. 현재 종료 less하고 다음과 같은 작업을 수행합니다.

grep -v "event text" Events.log | less

이제 필터링하고 싶은 다른 일반적이고 흥미롭지 않은 이벤트가 많이 나타납니다. 내가 할 수 있는 방법이 없을까?grep -v ~에less? 꼭 해야 하는 것보다

egrep -v "event text|something else|the other thing|foo|bar" Events.log | less

제 생각에는 이는 모든 종류의 로그 파일을 볼 때 유용한 기능입니다. less이 도구가 아니라면 제가 찾고 있는 품질을 갖춘 다른 도구가 있습니까? 단지 less내장된 grep.

답변1

less매우 강력한 패턴 일치 기능을 가지고 있습니다. ~에서매뉴얼 페이지:

&pattern

    pattern일치하는 행만 표시되고, 일치하지 않는 행은 pattern 표시되지 않습니다. 비어 있는 경우 pattern( &즉시 입력하는 경우 ENTER) 모든 필터링이 꺼지고 모든 행이 표시됩니다. 필터링이 적용되면 프롬프트 시작 부분에 & 기호가 나타나 파일의 일부 줄이 숨겨질 수 있음을 경고합니다.

    / 명령 에 표시된 것처럼 특정 문자는 특수 문자입니다 .

    ^N또는!

      일치하지 않는 행만 표시됩니다 pattern.
    ^R
      정규식 메타 문자를 해석하지 마십시오. 즉, 단순 리터럴 비교를 수행하십시오.

    ____________
    특정 문자는 처음에 입력하면 pattern검색 유형이 바뀌는 것이 아니라 특수 문자입니다 pattern.

   (물론 및 는 ^N각각 + 와 + 를 ^R나타냅니다 .) CtrlNCtrlR

예를 들어 &dns패턴과 일치하는 행만 표시되고 dns, &!dns이러한 행은 패턴과 일치하지 않는 행만 표시하도록 필터링(제외)됩니다.

/명령 설명에 참고하세요.

    이는 pattern시스템 제공 정규식 라이브러리에서 인식되는 정규식입니다.

그래서

  • &eth[01]eth0또는을 포함하는 행을   표시합니다 .eth1
  • &arp.*eth0arp다음 내용을 포함하는 줄이 표시됩니다eth0
  • &arp|dnsarp또는을 포함하는 행을   표시합니다 .dns

그리고 !위의 내용은 모두 취소될 수 있습니다. 따라서 질문에 사용하려는 예제 명령은 다음과 같습니다.

&!event text|something else|the other thing|foo|bar

및(및/다음/이전으로 이동)을 사용하여 검색할 수도 있습니다./pattern?patternnN

답변2

확립된오리온의 대답, 이것less(1)매뉴얼 페이지설명하다

/pattern

    파일에서 앞으로 검색질소- 라인에 가 포함되어 있습니다 pattern.  질소 기본값은 1입니다. 이는 pattern시스템 제공 정규식 라이브러리에서 인식되는 정규식입니다. 검색은 표시된 두 번째 줄에서 시작됩니다(그러나 이를 변경하는 옵션을 참조하세요) -a.-j

    pattern특정 문자는 ;의 시작 부분에 입력하면 특수 문자입니다. 다음의 일부가 아닌 검색 유형을 수정합니다 pattern.

    ^N또는!

      일치하지 않는 행을 검색합니다 pattern.
    ^E또는*
      여러 파일을 검색합니다. 즉, 일치하는 항목을 찾지 못한 채 현재 파일의 끝에 검색이 도달하면 명령줄 목록의 다음 파일에서 검색이 계속됩니다.
    ^F또는@
      현재 화면에 표시된 내용이나 옵션 설정 -a에 관계없이 명령줄 목록에 있는 첫 번째 파일의 첫 번째 줄부터 검색을 시작합니다.-j
    ^K
      현재 화면의 텍스트와 일치하는 텍스트를 강조 표시 pattern하지만 첫 번째 일치 항목으로 이동하지는 않습니다(현재 위치 유지).
    ^R
      정규식 메타 문자를 해석하지 마십시오. 즉, 단순 리터럴 비교를 수행하십시오.

    ____________
    명령 앞에는 다음과 같은 십진수가 올 수 있습니다.질소설명에…

   (물론 ^N등 은 + 와 + 등을 ^E나타냅니다 .) CtrlNCtrlE

결과적으로는 함께 잘 작동합니다. 예를 들어 다음 명령은&pattern/pattern

  • &!arp|dnsEnter
  • /Ctrl+Kfail|fatal|fault|sd[a-z][0-9]Enter

arp어느 순서로든 입력하면 또는 dns(예: ) 을 포함하는 모든 행이 숨겨지고(제외 ), 나머지 행에서 , 또는 SCSI 장치 이름( ) 처럼 보이는 모든 grep -v항목이 강조 표시됩니다 . or 및 Also 또는 기타 위험한 단어가 포함된 줄은failfatalfaultsd[a-z][0-9]arpdnsfail아니요표시됩니다.

답변3

나는 지난 몇 달 동안 그것에 약간 집착하게 되었습니다 fzf.

당신에 관한 한,컨텍스트가 필요하지 않은 한(즉, grep -A, -B, 또는 less 와 동등한 것이 필요하지 않습니다.) fzf는 매우 강력한 도구입니다.-C&

다음은 어리석은 예입니다.

printf "%s\n" {aa,bb,cc}{dd,ee,ff}{gg,hh,ii} | fzf

이와 같은 입력을 사용하여 실행하면 aa | bb dd | ee !gg !hh무슨 일이 일어나고 있는지 빠르게 확인할 수 있습니다.

Fzf |연산자에 대한 문서는 거의 없지만 내 추측으로는 이 연산자가 바로 앞과 뒤의 용어에만 적용된다는 것입니다. 이는 OR이 실제로 AND보다 우선한다는 것을 의미합니다(예:절대적인; 기본적으로 모든 용어는 AND로 연결됩니다. 그러나 대부분의 경우 이는 문제가 되지 않으며 내 경험상 모든 것이 순조롭게 진행됩니다.

시도 해봐. 내가 찾고 있는 것이 무엇인지 확실하지 않고 상황이 중요하지 않을 때 검색할 때 매우 유용하다고 생각합니다.

관련 정보