Bash

查找多個文件中最後一次出現的字元串

  • December 5, 2015

我需要搜尋多個日誌文件(過去 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

引用自:https://unix.stackexchange.com/questions/247491