Bash
查找多個文件中最後一次出現的字元串
我需要搜尋多個日誌文件(過去 24 小時內生成的所有文件,都保存在同一目錄中)以查找字元串的最後一次出現。這是我寫的命令:
find . -mtime 1 | grep fileprefix | xargs grep 'search string' | tail -1
但這僅返回一個文件的最後一行。關於如何調整它以獲得所有線路的任何建議?
假設 GNU 設施:
find . -mtime -1 -exec bash -c \ 'for f; do tac "$f" | grep -m1 fileprefix; done' _ {} +
如果一切都在一個目錄中,你可以這樣做:
for file in *fileprefix*; do grep 'search string' "$file" | tail -1 done
tac
如果這些是大文件,則可能值得通過以相反的順序列印文件(最後一行在前)然後grep -m1
匹配第一次出現來加快速度。這樣,您就不必閱讀整個文件:for file in *fileprefix*; do tac file | grep -m1 'search string' done
兩者都假設沒有匹配的目錄
fileprefix
。如果有,你會得到一個可以忽略的錯誤。如果這是一個問題,請僅檢查文件:for file in *fileprefix*; do [ -f "$file" ] && tac file | grep -m1 'search string' done
如果您還需要列印文件名,請添加
-H
到每個grep
呼叫中。或者,如果您grep
不支持它,請告訴它也搜尋/dev/null
. 這不會改變輸出,但由於grep
給出了多個文件,它總是會列印每個命中的文件名:for file in *fileprefix*; do grep 'search string' "$file" /dev/null | tail -1 done