Shell

如何在與模式匹配的特定文件中搜尋

  • December 16, 2013

如何在特定文件中找到與模式匹配的單詞。例如搜尋versionCMake*目前目錄中遞歸找到的文件。

如果要查看文件名和行號,POSIXly:

find . -name 'CMake*' -type f -exec grep -nF /dev/null version {} +

(您不想在這裡使用每個文件;執行一個)。grep這是 GNUism 的標準等價物:

find . -name 'CMake*' -type f -print0 | xargs -r0 grep -nHF {} +

find(在第一個中), xargs(在第二個中) 將傳遞盡可能多的參數,grep而不會超過您可以傳遞給命令的參數數量的限制。在進行拆分時,可能會在最後一次執行時僅傳遞一個參數,grep在這種情況下grep不會列印文件名。這就是為什麼你需要/dev/null那裡(或-H使用 GNU grep)。

使用-type f,我們只考慮正常文件(不是設備、符號連結、管道、目錄……)。

如果你想使用 GNUisms,你可以使用 GNUgrep的能力來下降一個目錄樹:

grep -rHnF --include='CMake*' version .

您不想使用-R,因為這會導致grep在下降目錄樹並從設備、fifo、套接字讀取時遵循符號連結……

該版本更安全、更高效,但不便攜。

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