source

연속 스트림을 '그립'하는 방법

manycodes 2023. 4. 11. 22:12
반응형

연속 스트림을 '그립'하는 방법

★★★★★★★★★★★를 사용할 수 있습니까?grep속되되 츠요시

은 일종의 '아, 아, 아'라는 뜻이에요.tail -f <file> 「」, 「」, 「」,grep관심 있는 대사만 남길 수 있도록 출력에 적어주세요.

tail -f <file> | grep pattern 그런 것 같아grep 번만 할 수 .tail즉 '없음 '없음', '없음', '없음', '없음.

.grepBSD grep(FreeBSD, Mac OS X)는 BSD Grep입니다.

tail -f file | grep --line-buffered my_pattern

?--line-bufferedGNU grep(「Linux」)는, 「SmartOS, AIX, QNX」(「SmartOS, AIX, QNX」)의 「Unix-likes」의 「YMV」를 참조해 주세요. 2020년 【2020】11월 현재,--line-buffered 3. 상태( grep 3.5))SUSE. 그러나 아래 코멘트에 따르면 일반적으로 필요한 것 같습니다.)

용 the the the를 .tail -f <file> | grep <pattern>★★★★★★★★★★★★★★★★★★.

종료될 때까지가 아니라 grep가 플러시될 때까지 기다립니다(Ubuntu를 사용하고 있습니다).

GREP가 출력 버퍼링을 사용하는 것이 문제인 것 같습니다.해라

tail -f file | stdbuf -o0 grep my_pattern

출력 버퍼링 모드의 grep를 unbuffered로 설정합니다.

파일 전체(꼬리뿐 아니라)에서 일치 항목을 찾고 새 일치 항목을 대기하려면 다음과 같이 하십시오.

tail -c +0 -f <file> | grep --line-buffered <pattern>

-c +0이 플래그를 시작해야 .0바이트( )-c ( )+를 참조해 주세요를 참조해 주세요.

의 경우, 「」를 할 수 .tail -f /var/log/some.log |grep foo잘 될 거야

중인 해야 하는데 GREP를 해야 할 수 .--line-buffered다음과 같이 중간 GREP로 전환합니다.

tail -f /var/log/some.log | grep --line-buffered foo | grep bar

당신은 이 대답을 강화라고 생각할 수 있습니다.주로 사용하고 있습니다.

tail -F <fileName> | grep --line-buffered  <pattern> -A 3 -B 5

-F는 파일 회전 시 (-f는 파일 회전 시 정상적으로 동작하지 않음)가 좋습니다.

-A와 -B는 패턴 발생 직전과 후에 라인을 얻는 데 유용합니다.이러한 블록은 점선 구분 기호 사이에 나타납니다.

하지만 저는 다음 작업을 하는 것이 더 좋습니다.

tail -F <file> | less

이것은 스트리밍된 로그 내부를 검색하려는 경우 매우 유용합니다.내 말은 앞뒤로 돌아보고 깊이 들여다보고

내가 평소에 좋아하던 건 아무도 못 봤어

less +F <file>
ctrl + c
/<search term>
<enter>
shift + f

는 이것을 사용하는 것이 , 「 」를 사용할 수 때문입니다.ctrl + c든지 파일을후 ""를 .shift + f이치노

sed가 더 나은 선택입니다(스트림 에디터)

tail -n0 -f <file> | sed -n '/search string/p'

특정 문자열을 찾은 후 tail 명령어를 종료하려면 다음 절차를 수행합니다.

tail --pid=$(($BASHPID+1)) -n0 -f <file> | sed -n '/search string/{p; q}'

명백히 bashism: $BASHPID는 tail 명령어 프로세스 ID가 됩니다.sed 명령어는 파이프에서 tail 뒤에 있기 때문에 sed 프로세스 ID는 $BASHPID+1이 됩니다.

아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아. Grep대부분의 Unix 명령어는 한 번에 한 줄씩 스트림으로 동작합니다.테일에서 나오는 각 행이 분석되어 일치하는 경우 전달됩니다.

이 명령어는 나에게 유효합니다(Suse).

mail-srv:/var/log # tail -f /var/log/mail.info |grep --line-buffered LOGIN  >> logins_to_mail

메일 서비스에 대한 로그인 수집

이 질문에는 조금 늦었지만, 이러한 작업을 감시 업무의 중요한 부분이라고 생각하고, 이하에 (짧지 않은) 답변을 드리겠습니다.

bash를 한 다음 로그

명령어 1. 명령어tail

이 명령어는 이미 공개된 답변보다 조금 더 상세합니다.

  1. 팔로우 옵션의 차이tail -f ★★★★★★★★★★★★★★★★★」tail -F, manpage에서:

       -f, --follow[={name|descriptor}]
              output appended data as the file grows;
    ...
       -F     same as --follow=name --retry
    ...
       --retry
              keep trying to open a file if it is inaccessible
    

    「」, 「」를 합니다.-F-f,tail는 삭제되면(로그 순환 시, 샘플의 경우) 파일을 다시 엽니다.
    이것은 로그 파일을 며칠 동안 보는 데 유용합니다.

  2. 여러 파일을 동시에 팔로우할 수 있는 기능
    「 」 「 」 :

    tail -F /var/www/clients/client*/web*/log/{error,access}.log /var/log/{mail,auth}.log \
               /var/log/apache2/{,ssl_,other_vhosts_}access.log \
               /var/log/pure-ftpd/transfer.log
    

    수백 개의 파일을 통한 다음 이벤트의 경우...(이 답변의 나머지 부분은 읽을 수 있는 방법을 이해하도록 합니다.);)

  3. -n하지 마세요)-c★★★★★★★★★★★★★★★★★★)
    로는 " " 입니다.tail열 살이것은 조정할 수 있습니다.

    tail -n 0 -F file
    

    파일을 따르지만 새 행만 인쇄됩니다.

    tail -n +0 -F file
    

    진행 상황을 따라가기 전에 파일 전체를 인쇄합니다.

2. 배관 시 버퍼 문제:

출력 필터링을 계획하고 있는 경우는 버퍼링을 고려해 주세요.-u을 지정합니다.sed,--line-buffered★★★★★★에grep , 「」stdbuf★★★★★★★★★★★★★★★★★★:

tail -F /some/files | sed -une '/Regular Expression/p'

입니다)grep쓸 더 -used명령어를 입력합니다.

tail -F /some/files |
    sed -une '/Regular Expression/p' |
    stdbuf -i0 -o0 tee /some/resultfile

3. 최신 저널링 시스템

시스템에서는 ""가 "tail -f /var/log/syslog journalctl -xf

journalctl -axf | sed -une '/Regular Expression/p'

, 읽어주세요.man page이 도구는 로그 분석을 위해 구축되었습니다.

4. 이것을 스크립트로 통합한다.

  1. 2개 이상의 파일의 컬러 출력

    다음으로 많은 파일을 감시하고 있는 스크립트의 예를 제시하겠습니다.첫 번째 파일의 색상은 다른 파일과 다릅니다.

    #!/bin/bash
    
    tail -F "$@" |
        sed -une "
            /^==> /{h;};
            //!{
                G;
                s/^\\(.*\\)\\n==>.*${1//\//\\\/}.*<==/\\o33[47m\\1\\o33[0m/;
                s/^\\(.*\\)\\n==> .* <==/\\o33[47;31m\\1\\o33[0m/;
                p;}"
    

    호스트에서는 정상적으로 동작하고 있습니다.

    sudo ./myColoredTail /var/log/{kern.,sys}log
    
  2. 인터랙티브 스크립트

    이벤트 대응 로그를 감시하고 있을 가능성이 있습니다.

    다음은 USB 디바이스가 나타나거나 사라졌을 때 소리를 재생하는 작은 스크립트입니다만, 같은 스크립트로 메일을 보내거나 커피 머신의 전원을 켜거나 하는 등, 그 외의 어떠한 상호 작용도 할 수 있습니다.

    #!/bin/bash
    
    exec {tailF}< <(tail -F /var/log/kern.log)
    tailPid=$!
    
    while :;do
        read -rsn 1 -t .3 keyboard
        [ "${keyboard,}" = "q" ] && break
        if read -ru $tailF -t 0 _ ;then
            read -ru $tailF line
            case $line in
                *New\ USB\ device\ found* ) play /some/sound.ogg ;;
                *USB\ disconnect* ) play /some/othersound.ogg ;;
            esac
            printf "\r%s\e[K" "$line"
        fi
    done
    
    echo
    exec {tailF}<&-
    kill $tailPid
    

    키를 누르면 종료할 수 있습니다.

당신은 결코 성공하지 못할 거야

tail -f /var/log/foo.log |grep --line-buffered string2search

tail의 별칭으로 "colortail"을 사용하는 경우(예: bash)

alias tail='colortail -n 30'

이것이 tail is a alias 같은 것을 출력하는지 타입 에일리어스로 확인할 수 있습니다.colortail -n 30이 있습니다 : ) 럼 . . . . .)) : )

솔루션:

가명을 삭제하다

unalias tail

이 명령어로 '실제' 테일 바이너리를 사용하고 있는지 확인합니다.

type tail

다음과 같이 출력됩니다.

tail is /usr/bin/tail

명령어를 실행할 수 있습니다.

tail -f foo.log |grep --line-buffered something

행운을 빌어요.

라인 버퍼링 옵션이 없는 경우 grep 대신 awk(다른 great bash 유틸리티)를 사용합니다.Tail에서 데이터를 지속적으로 스트리밍합니다.

이것이 GREP의 사용법입니다.

tail -f <file> | grep pattern

awk를 사용하는 방법은 다음과 같습니다.

tail -f <file> | awk '/pattern/{print $0}'

언급URL : https://stackoverflow.com/questions/7161821/how-to-grep-a-continuous-stream

반응형