내가 가지고 있다고 가정하자log.txt
log.txt의 샘플 형식은 다음과 같습니다.
Code Data Timestamp
...
C:57 hello 1644498429
C:56 world 1644498430
C:57 water 1644498433
...
문자열이 포함된 행을 필터링하려면 C:57
다음과 같이 할 수 있습니다 .
cat log.txt | grep C:57
그런 다음 출력을 새 파일로 리디렉션합니다.
cat log.txt | grep C:57 > filtered_log.txt
그러나 log.txt에 새로운 변경 사항이 있으면 명령을 다시 반복해야 합니다. 파일에 새로운 변경 사항이 있을 때마다 또는 문자열이 포함된 새 줄이 있을 때만 주기적으로 실행되기를 원합니다 C:57
.
답변1
다음과 같이 사용할 수 있습니다 tail -f
.
tail -f log.txt|grep C:57 >> filtered_log.txt
log.txt
이렇게 하면 태그를 지속적으로 파악 C:57
하고 일치하는 항목을 filtered.log.txt
.
cat
로그를 읽고 이를 파이프하는 데 사용하는 것은 grep
쓸모가 없습니다 cat
. grep
파일을 직접 읽을 수 있습니다. a 와 a 를 결합하면 cat
I/O가 낭비됩니다 grep
.
여기서 한 가지 단점은 필터링된 출력이 버퍼링으로 인해 지연될 수 있다는 것입니다. 이는 다음과 같은 방법으로 피할 수 있습니다.
tail -f log.txt|grep --line-buffered C:57 >> filtered_log.txt
또는 다음 stdbuf -o0
명령을 사용하십시오.
tail -f log.txt|stdbuf -o0|grep C:57 >> filtered_log.txt C:57