使用 grep 在 Linux 上查找包含特定文本的所有文件
本文介紹了如何在 Linux 上查找包含特定文本的所有文件。為此,我們將使用 grep,一個標準的 Unix 程序。
grep是一個命令行實用程序,它打印與給定模式匹配的行,默認情況下應(yīng)安裝。
讓我們從簡單的開始。假設(shè)您要在當前目錄及其子目錄中的所有文件中搜索單詞要linuxmi(區(qū)分大小寫?。?。那么你需要打開終端,導(dǎo)航到要執(zhí)行搜索的文件夾,然后運行:
- linuxmi@linuxmi:~/www.linuxmi.com$ grep -r 'linuxmi'
這列出了當前文件夾和子文件夾中的所有文件,其中包含linuxmi. 這包括像linuxmicom例如這樣的字符串,因為它包含我們的搜索模式linuxmi. -r代表遞歸,讀取目錄及其子目錄中的所有文件。如果您需要遞歸的對目錄下的所有文件(包括子目錄)進行查找,請使用-R代替-r。
- linuxmi@linuxmi:~/www.linuxmi.com$ grep -R 'text'
如果您只想列出包含完整單詞的文件名linuxmi(而不是默認的部分單詞匹配),而不是諸如linuxmicom, 之類的內(nèi)容wwwlinuxmi,則需要附加-w(整個單詞)命令行選項,例如這個:
- linuxmi@linuxmi:~/www.linuxmi.com$ grep -rw 'linuxmi'
如果您不想在當前文件夾中搜索,而是在特定文件夾中搜索,您可以通過在命令末尾添加它來指定 grep 應(yīng)該查看的路徑,如下所示:
- linuxmi@linuxmi:~/www.linuxmi.com$ grep -rw 'linuxmi' /home/linuxmi/linuxmi
Grep 有很多選項,但下面我將只列出一些在 Linux 上嘗試查找包含特定文本的所有文件時您可能會覺得特別有用的選項(除了上面已經(jīng)提到的那些):
- -n顯示行號。當找到匹配項時,除了找到它的文件路徑之外,grep 還會顯示找到該模式的行號
- -i執(zhí)行不區(qū)分大小寫的搜索(默認情況下區(qū)分大小寫)。根據(jù)文件的數(shù)量,這可能會減慢搜索速度,因此在使用時要考慮到這一點
- --include=GLOB/--exclude=GLOB包括或排除某些文件
- --exclude-dir=GLOB 用于從搜索中排除文件夾
讓我們看一個結(jié)合這些命令行標志的例子。假設(shè)您要查找文件夾及其子文件夾中不區(qū)分大小寫 ( -i)linuxmi的所有~/Documents文件,但linuxmi和linuxmi.com子文件夾 ( --exclude-dir)除外,并且僅搜索具有.txt和.js擴展名 ( --include)的文件。此外,您希望顯示行號 ( -n)、遞歸搜索并跟蹤所有符號鏈接 ( -R)。在這種情況下,您需要使用的命令是這樣的:
- linuxmi@linuxmi:~/www.linuxmi.com$ grep -Rni --exclude-dir={linuxmi,linuxmi.com} --include={*.txt,*.js} 'linuxmi' /home/linuxmi/www.linuxmi.com
如下圖: