변경 로그 파일에서 읽기

변경 로그 파일에서 읽기

하나는 /location/of/thefile지속적으로 변경되는 로그 파일입니다. 평균 새로 고침 밀도는 분당 4회이며 가능한 최대 새로 고침 빈도는 분당 30~40회입니다. 새로 고칠 때마다 평균 2~5개의 행이 추가되지만 극단적인 경우 수백 개가 추가될 수도 있습니다. 각 줄은 [YYYY-MM-DD HH:MM:SS]타임스탬프로 시작하고 그 뒤에 일반 텍스트(100-200, 최대 수백 자)가 옵니다.

내 임무는간단한 명령이 로그 파일을 지속적으로 모니터링하고 다음을 포함하는 각 행을 표준 출력으로 보냅니다.foo 또는 bar알파벳 문자열. 이러한 (하위)문자열 앞뒤에 문자가 있을 수 있습니다( \n물론 (하위)문자열 다음에만 해당) \0. 심지어 . 단어는 가능한 모든 변형에서 대문자로 표기될 수 있습니다.

글쎄요, 해결책에 대한 제 생각은 항상 타이밍 시스템 호출과 관련이 있지만 이를 사용해서는 안 됩니다. 저를 위해 하나 만들어 주세요간단한 명령. 매우 감사합니다!

답변1

제가 질문을 잘못 이해했을 수도 있는데, 이것을 사용하지 못하는 이유가 있나요?

tail -f /location/of/thefile | grep -i -E "foo|bar"

답변2

다음과 같이 명명된 파이프를 사용합니다.

logfile.txt파일을 계속해서 읽고 readfile.sh.

# readfile.sh

while read line
do
  echo $line
done < mypipe
$ mkfifo mypipe
$ #this will block (will not exit)
$ ./readfile.sh

다른 쉘에서, 그러나 동일한 디렉토리(mypipe 파일이 있는 곳)에:

$ # This will go to background
$ tail -f logfile.txt >> mypipe &

완벽한. logfile.txt에 들어가는 내용은 readfile.sh종료되지 않고 인쇄됩니다.

관련 정보