Grep
定期過濾更改文件並將過濾後的輸出重定向到新文件
假設我有
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 有新變化時,我應該再次重複執行該命令。我希望它定期執行或針對文件中的每個新更改執行,或者僅在有包含 string 的新行時執行
C:57
。
您可以這樣使用
tail -f
:tail -f log.txt|grep C:57 >> filtered_log.txt
這會不斷讀取
log.txt
grepping 令牌C:57
並將任何匹配項添加到filtered.log.txt
.使用
cat
來讀取日誌和管道grep
是無用的cat
。grep
可以直接讀取文件。您通過組合 acat
和 a來浪費 I/Ogrep
。這裡的一個缺點是過濾輸出的出現可能由於緩衝而延遲。這可以通過以下方式規避:
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