Shell
如何在與模式匹配的特定文件中搜尋
如何在特定文件中找到與模式匹配的單詞。例如搜尋
version
在CMake*
目前目錄中遞歸找到的文件。
如果要查看文件名和行號,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
使用 GNUgrep
)。使用
-type f
,我們只考慮正常文件(不是設備、符號連結、管道、目錄……)。如果你想使用 GNUisms,你可以使用 GNU
grep
的能力來下降一個目錄樹:grep -rHnF --include='CMake*' version .
您不想使用
-R
,因為這會導致grep
在下降目錄樹並從設備、fifo、套接字讀取時遵循符號連結……該版本更安全、更高效,但不便攜。