연속 스트림을 '그립'하는 방법
★★★★★★★★★★★를 사용할 수 있습니까?grep
속되되 츠요시
은 일종의 '아, 아, 아'라는 뜻이에요.tail -f <file>
「」, 「」, 「」,grep
관심 있는 대사만 남길 수 있도록 출력에 적어주세요.
tail -f <file> | grep pattern
그런 것 같아grep
번만 할 수 .tail
즉 '없음 '없음', '없음', '없음', '없음.
.grep
BSD grep(FreeBSD, Mac OS X)는 BSD Grep입니다.
tail -f file | grep --line-buffered my_pattern
?--line-buffered
GNU 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
이 명령어는 이미 공개된 답변보다 조금 더 상세합니다.
팔로우 옵션의 차이
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
는 삭제되면(로그 순환 시, 샘플의 경우) 파일을 다시 엽니다.
이것은 로그 파일을 며칠 동안 보는 데 유용합니다.여러 파일을 동시에 팔로우할 수 있는 기능
「 」 「 」 :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
수백 개의 파일을 통한 다음 이벤트의 경우...(이 답변의 나머지 부분은 읽을 수 있는 방법을 이해하도록 합니다.);)
-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
쓸 더 -u
sed
명령어를 입력합니다.
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. 이것을 bash 스크립트로 통합한다.
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
인터랙티브 스크립트
이벤트 대응 로그를 감시하고 있을 가능성이 있습니다.
다음은 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
'source' 카테고리의 다른 글
제목 변경 시 원치 않는 UIButton 애니메이션을 중지하는 방법 (0) | 2023.04.11 |
---|---|
SQL Server "텍스트" 데이터 유형의 WHERE 절 (0) | 2023.04.11 |
Postgre에 인덱스가 있는 열 나열SQL (0) | 2023.04.11 |
식별자가 "인 앱 ID를 사용할 수 없습니다.다른 문자열을 입력하십시오. (0) | 2023.04.11 |
Linux 스크립트의 터미널에서 사용자 입력 숨기기 (0) | 2023.04.11 |