如何在 Linux 系統中使用終端機搜尋檔案中的文本

最後更新: 18/03/2026
作者: 艾薩克
  • Grep 是 Linux 中用於在檔案中搜尋文字模式的主要工具,它提供了遞歸搜尋、忽略大小寫或顯示行號等選項。
  • find 指令可以按名稱、類型、日期或大小來尋找檔案和目錄,它與 grep 指令結合使用 -exec 進行進階搜尋。
  • Awk 和 sed 不僅可以找到文本,還可以按字段或透過替換來處理和轉換文本,從而自動執行分析和編輯任務。
  • Ack 為程式碼專案提供了一種簡化的 grep 替代方案,而圖形搜尋引擎則使基本搜尋無需使用終端即可變得更加容易。

在 Linux 系統中搜尋文件中的文本

在 GNU/Linux 系統上處理大量文件,如果沒有好用的搜尋工具,會非常令人頭痛。當專案規模擴大或需要查看大量日誌時,這種情況尤其突出。 能夠在 Linux 系統中透過終端機搜尋文件中的文本 這決定了你是在浪費時間還是真正做到敏捷。

好消息是,Linux 自帶許多專門為此設計的實用程式。例如,可以使用以下命令: grep、find、awk、sed 或 ack 等工具可以幫助您找到單字、片語或模式 幾乎可以搜尋系統上的任何文件,將簡單的搜尋與非常強大的正規表示式結合。

grep 指令:Linux 系統中用於搜尋文字的經典工具

Linux 中大多數文字搜尋的核心是 grep 命令是命令列實用程序,旨在尋找檔案中的模式。它的名稱來自“全域正規表示式列印”,這已經給了你一些提示:它是用來處理正規表示式的,並顯示所有與你正在尋找的內容相符的行。

更實際地說, grep 指令接收一個搜尋模式(純文字或正規表示式)以及一個或多個檔案或目錄。它會讀取文件內容,並將匹配的行寫入標準輸出。您可以在開發專案中使用它,也可以用它來查看設定檔或系統日誌。

基本語法非常簡單明了,通常遵循相同的模式: grep "text_or_pattern" file_or_path接下來,就是根據需要添加選項:遞歸搜尋、忽略大寫字母、顯示行號等等。

grep 在特定檔案上的基本用法

先舉個最簡單的例子,假設你想找出這個詞 在 Web 專案的特定 PHP 檔案中定義“價格”例如,一個 Laravel 控制器:

grep "prices" ./app/Http/Controllers/PricesController.php

該命令將讀取指定的文件, 將顯示所有包含字串「prices」的行,內容與原文完全一致。區分大小寫字母。如果您從事程式碼工作,您經常會想知道每個匹配項出現在哪一行。

要實現這一點,只需添加該選項即可。 -n這樣,結果每場比賽前都會包含行號:

grep -n "prices" ./app/Http/Controllers/PricesController.php

在其他情況下,你可能對完全相反的情況感興趣: 只顯示不包含特定單字的行。例如,控制器中所有未出現該語句的行。 use.

這時,選擇權就發揮作用了。 -v這會反轉篩選標準並排除匹配項:

grep -vn "use" ./app/Http/Controllers/Controller.php

在 grep 搜尋中忽略大小寫字母

當您查找一個可以以不同形式出現的單字時(例如) home、Home、HOME 或類似組合理想情況下,你應該忽略大小寫字母的區別,只專注於文字內容。

為此,grep 提供了一個選項 -i這會強制對指定文件進行不區分大小寫的搜索,無論單字拼寫如何:

grep -i "texto" nombre-del-archivo

如果你想將同樣的方法應用於 Web 專案文件,例如,你可以這樣做: 在 Laravel 控制器中搜尋單字“home”,無需考慮大小寫。 結合使用 -i 和 -n:

grep -in "home" ./app/Http/Controllers/HomeController.php

使用 -i 以及遞歸搜索一次掃描整個項目,尋找你可能記不清拼字方式的特定單字或名稱。

使用 grep 在目錄和子目錄中進行遞歸搜尋

真正的力量來自於你不再侷限於單一的框架,而是… 你對整個目錄執行 grep 指令,讓它遍歷所有子目錄。為此,可以使用以下選項: -r o -R.

最簡單的方法是,您可以先在主資料夾中的所有文字檔案中搜尋某個單字,例如在 .txt 檔案中搜尋字串「text」。 /home:

grep "texto" /home/ *.txt

如果你希望 grep 也能導航到子目錄, 新增 -r 參數以啟用遞歸搜索 並且保留 .txt 副檔名過濾器:

grep -r "texto" /home/ *.txt

當你不在乎文件類型,只想…的時候 在 /home 目錄及其子目錄中的所有檔案中尋找包含「text」的單字。只需標明路線即可:

grep -r "texto" /home/

類似的情況也適用於開發專案。例如,如果您在目錄中工作 ./app/Http/Controllers 你需要找到這個字。 任何控制器中的“索引”,您可以使用:

grep -rn "index" ./app/Http/Controllers

在這種情況下 -r 參數使搜尋遞歸進行,-n 參數為每個結果加上行號。如果您只想知道哪些檔案包含該單字,而不需要查看具體行,可以使用該選項。 -l 僅列出檔案名稱:

  如何在 PowerShell 中使用 ArgumentCompleter 和 Register-ArgumentCompleter

grep -rl "index" ./app/Http/Controllers

-ry 和 -R 的區別、排除項和實際範例

除了 -r 之外,grep 還提供 -R 選項也會執行遞歸搜索,但它會追蹤符號連結。這雖然只是細微的差別,但在有許多指向其他目錄的符號連結的系統中,它可能會顯著改變系統的行為。

在典型的使用者環境中,你可能會搜尋這個詞。 您主目錄中任何目錄中的“文字” 所以:

grep "texto" ~/directorio

如果希望它抓取包含的子目錄,可以使用以下兩種方法之一:

grep -R "texto" ~/directorio

好吧:

grep -ir "texto" ~/directorio

在最後一個例子中, 您可以使用 `-i` 忽略大小寫,並使用 `-r` 遞歸遍歷整個目錄樹。這是日常生活中非常常見的組合。

另一個非常有用的案例涉及 在目前目錄下的所有檔案內容中尋找類似「linux」的單字,並查看每個檔案的路徑。 其中包含它。那麼指令就會是:

grep -ril "linux" .

在大型專案中,能夠做到這一點也至關重要。 從搜尋中排除某些目錄或檔案類型。例如,跳過 .git建立資料夾或大型文件文件。

使用 grep 可以透過組合輕鬆完成此操作。 --exclude-dir y --exclude除了突出顯示顏色匹配項之外:

grep -ir --color --exclude-dir={directorio1,directorio2,.git} --exclude={*.txt,*.md} /

grep 的特殊模式、註解和其他範例

Grep 不僅可以用於搜尋單字,而且 它允許您定義更複雜的模式來定位,例如,文件中的註釋。一個典型的例子是尋找所有以該符號開頭的行。 #在設定檔中非常常見。

在這種情況下,你可以直接說:

grep ^# nombre-del-archivo

這裡的角色 ^ 表示行的開始,井號 (#) 表示您正在尋找以該符號開頭的註解。這對於類似這樣的文件非常有效。 /etc/fstab, /etc/hosts 或任何典型的 Linux 設定文件,或對於 在 make menuconfig 中尋找配置.

大型專案中另一個非常常見的實際情況是需要… 在目錄及其子目錄中的所有檔案中搜尋特定短語或表達式常用的一種變體是:

grep -ri "frase o palabra a buscar" *

在這種情況下, -r 執行遞歸搜索,-i 忽略大寫字母和通配符 * 這表示您希望將搜尋範圍擴展到目前目錄中的所有檔案和資料夾。對於開發 Web 應用程式或複雜腳本的開發者來說,這可能是最常用的組合之一。

如果你想更深入地了解 grep,你可以隨時參考… 官方 GNU 文檔 在專案網站或專門介紹此工具的維基百科條目中,詳細介紹了所有進階選項和對擴展正規表示式的完全支援。

使用 grep 的正規表示式和進階選項

當事情變得複雜,光是搜尋一個字已經不夠的時候, grep 的正規表示式功能可讓您建立更強大的模式借助它們,您可以一次搜尋多個單字、字元範圍或重複模式。

一個非常實用的方法是使用 使用 -E 選項的 grep 指令它支援擴展正則表達式。例如: 如果您想在系統日誌中尋找包含「error」或「warning」的行,請執行下列操作你可以這樣做:

grep -E 'error|warning' /var/log/syslog

在這個例子中,角色 “|” 用作邏輯或因此,只要出現這兩個詞中的任何一個,該行就會匹配。這對於篩選日誌並只關注相關資訊非常有用。

另一個非常典型的組合是: 過濾錯誤訊息,不區分大小寫 在同一系統日誌檔案中,使用 -i 選項來簡化搜尋:

grep -i 'error' /var/log/syslog

如果你還想 遞歸遍歷整個 /var/log 樹,找出該字。您可以啟動:

grep -r 'error' /var/log/

組合方式有很多種,但思考模式始終如一: 明確你要找的模式以及尋找範圍,並新增選項以優化結果。 根據您的具體需求。

find:定位檔案並將其與 grep 結合使用

除了在文件中搜尋文字之外,您通常還需要 首先,根據檔案名稱、大小或修改日期找到你感興趣的檔案。此操作的關鍵命令是 這是任何 Linux 系統的另一個經典。

查找功能旨在 遞歸遍歷目錄層次結構,並傳回滿足條件的檔案或資料夾它本身並不能搜尋內容中的文本,但與 grep 結合使用,就成了進行複雜搜尋的非常強大的工具。

一般語法通常表示為 尋找路線 - 選項值然後,檔案名稱、類型、修改日期或大小等條件被串連起來。

例如,如果您要 在目前目錄中尋找名稱與“file”完全匹配的文件,你可以運行:

find . -name "archivo"

如果您需要的是 從根目錄 / 開始,對整個檔案系統執行相同的搜尋。訂單內容如下:

find / -name "archivo"

當你記不清單字的確切拼字時,你可以選擇… 使用 -iname 參數時不區分大小寫。這在共享系統中非常有用,因為每個人都用自己的方式命名事物:

  Linux 版 Timeshift 教學:完整指南,幫助您輕鬆掌握

find . -iname "archivo"

您也可以使用通配符來查找您只部分記得文件名的文件,例如,如果您認為它們曾經包含字串「chiv」:

find . -iname "*chiv*"

尋找和與 grep 結合使用的常用選項

「查找」不僅僅是一個名稱。它最常用的選項包括: -type、-mtime 和 -size 參數分別允許依資源類型、日期和大小進行篩選。分別。 類型 f 您指定只想要文件,而 -類型 d 你將搜尋範圍限定在目錄中。

選項 Mtime時光網 它用於搜尋文件。 修改於若干天前。 例如, -mtime -7 選擇最近 7 天內更改的文件,這對於僅查看最近的日誌非常有用。

就其本身而言, -size 參數可讓您按檔案大小搜尋檔案。如果您想找出系統或專案中哪些大檔案佔用了過多空間,這將非常理想。您可以組合使用所有這些篩選條件,進一步最佳化結果。

真正有趣的部分在於… 使用 `-exec` 參數將 `find` 和 `grep` 命令結合起來,這樣您就可以先選擇要尋找的文件,然後再在其中搜尋文字。例如,如果您想在所有文件中查找單字“error”。 .log de /var/log你可以運行:

find /var/log -name '*.log' -exec grep 'error' {} +

該命令將使 `find` 指令會產生一個 .log 檔案列表,並對每個檔案執行 `grep` 指令。 搜尋指定的文字字串。書籤 {} 被找到的檔案名稱和符號替換。 + 它可以同時處理多個文件。

如果你想進一步微調, 僅查看過去一周內修改過的文件。您可以新增條件 -mtime -7 訂單就這樣下單:

find /var/log -type f -mtime -7 -exec grep 'error' {} +

只需一行即可實現 按日期、文件類型和內容縮小搜尋範圍當您在生產伺服器上處理成千上萬個日誌檔案時,這真的非常強大。

awk:按字段搜尋和處理文本

雖然它通常更多地與結構化資料的操作聯繫在一起, awk 也可用於在文件中搜尋文字。此外,它還允許將每一行視為由分隔符號分隔的一組欄位。

Awk 其實是 一種小型、專用的程式語言,專為分析和處理文字檔案而設計。它的基本用法並不複雜:只需定義小節之間的圖案即可。 /patron/ 以及按鍵之間的操作,通常 {print} 顯示線條。

例如,如果您要 顯示 /var/log/syslog 檔案中所有包含單字「error」的行你可以採取以下直接措施:

awk '/error/ {print}' /var/log/syslog

這種工作方式類似於 grep,但 awk 的優勢尤其體現在以下方面: 您需要從每一行中提取特定欄位。例如,使用者名稱、IP 位址或標識符,以冒號分隔。

選項 -F 參數可讓您定義欄位分隔符以及這些變數 $1, $2, $3... 它們分別指第一字段、第二字段、第三字段等等。如果檔案中的欄位之間以逗號分隔,則表示它們位於相同位置。 :你可以這樣做:

awk -F':' '/error/ {print $1}' /var/log/syslog

透過這個例子,awk 它會尋找包含“error”的行,並僅顯示第一個欄位。 在冒號之前。應用於日誌時,它可以讓你只顯示日期、只顯示服務名稱或任何其他你感興趣的欄位。

sed:在流中尋找和取代文本

Linux 系統中另一個非常強大的文字處理工具是 sed,一個以文字字串轉換為導向的流程編輯器 當它們通過標準輸入時。雖然它最廣為人知的用途是尋找和替換,但它也可以用於對文件進行批量更改。

最常用的語法是基於指令的 s/patron/nuevo/,哪裡 s 它源自於“替代”。有了它,你可以 將文字的第一次出現替換為另一次出現。 在指定文件的每一行上。

例如,如果您要 將 /var/log/syslog 檔案中每一行第一次出現的「error」改為「ERROR」。 無需修改原始文件,您將能夠:

sed 's/error/ERROR/' /var/log/syslog

如果您需要的是 將每一行中所有出現的該字替換掉我們添加修飾符 g (來自“global”)在指令末尾:

sed 's/error/ERROR/g' /var/log/syslog

當你清楚自己想要和渴望的改變時 直接將其應用於文件,無需建立副本。關鍵選項是 -i表示「就地」:

sed -i 's/error/ERROR/g' /var/log/syslog

出於安全考慮,通常建議這樣做。 首先,不加 -i 參數進行測試,查看結果。只有當您確定替換正確時,您才應該新增修改實際檔案的選項。

ack:開發者的現代 grep 替代方案

除了經典工具之外,許多現代發行版還允許您安裝 ack,一個旨在改進 grep 的工具。主要專注於在原始碼樹中搜尋文字。

ack 的行為類似 grep,但是 預設情況下,它會忽略程式設計師通常不感興趣的某些目錄和檔案類型。例如 .git建置目錄或產生的二進位。這使得許多搜尋更快、更實用,而無需手動新增排除項。

  恢復損壞的本機網域控制器

要在基於 Debian 或 Ubuntu 的發行版上使用它,您只需: 從軟體包管理器安裝對應的軟體包:

sudo apt install ack

安裝完成後,您可以 在目前目錄樹中遞歸搜尋某個單字 只需執行如下簡單命令:

ack 'palabra'

如果你願意 將搜尋範圍限制在特定路線例如,若要在首頁上指定某個特定項目,您可以直接將其作為第二個參數指定:

ack 'palabra' '/ruta_archivo'

這樣,ack 就能遍歷指定路徑中的檔案。 顯示包含搜尋字串的行,並高亮顯示符合項目。 以美觀的方式呈現。在大型開發專案中,它可以成為您尋找分散在多個檔案中的函數、類別或文字字串的最佳幫手。

在大型檔案和整個系統中搜尋單字

當你遇到已經使用了多年的Linux系統時,通常會發現… 在海量檔案和目錄的情況下,尋找特定字詞可能看起來像是一項不可能的任務。這涉及到將上述幾種技術結合起來。

一方面,你可以使用 grep 指令支援遞歸搜尋和檔案類型過濾器這樣一來,您就可以只專注於相關文件,並排除無關資訊。一個很好的例子是在整個專案中搜尋某個關鍵字,同時避開某些版本控製或文件目錄。

另一方面,你可以從以下方面開始: 使用查找功能,按名稱或副檔名篩選,找到對應的檔案。然後僅對精簡後的檔案清單套用 grep 指令,或使用類似這樣的工具。 從二進位檔案中提取隱藏文字的字串.

就想要而言的具體情況 在位於特定路徑的一組文件中尋找單字grep 指令中常見的語法可能是:

grep -rw '/ruta_archivo' -e 'palabra'

在這裡, -r 啟用遞歸搜索,-w 僅搜尋完整的單字匹配項,-e 允許您定義要搜尋的模式。如果要排除某些文件類型,可以使用:

grep --exclude='*.tipo' -rw '/ruta_archivo' -e 'palabra'

因此, 你會忽略某些你不感興趣的擴充功能。這在混合了二進位檔案、圖像、臨時檔案和文字檔案的目錄中非常有趣。

萬一你想要 僅按檔案名稱搜索,不按內容搜尋記住,查找才是正確的工具。結構可以非常簡單,例如:

find . -name "archivo.tipo"

您可以按遞歸方式遍歷當前目錄,查找特定文件,立即看到其確切路徑,然後使用您喜歡的編輯器對其進行編輯。

在不使用終端機的情況下,如何在 Linux 系統中搜尋文字?

雖然命令列提供了強大的控制力,但有些人更喜歡… 從圖形環境執行某些搜尋特別是如果您是 Linux 新手或只是覺得 Linux 更方便的話。

在 GNOME、KDE ​​或類似桌面環境下, 文件資源管理器內建了搜尋引擎。 它允許您輸入一個單詞,並尋找包含該單字或名稱與輸入的文字相符的檔案。

實際上,你可以 開啟檔案管理器,導航到要搜尋的資料夾,點擊放大鏡圖標,然後輸入所需的字詞。。 你也可以 在 Linux 中建立快捷方式 快速存取常用資料夾。

雖然這種方法不如 grep、find 或 ack 那麼靈活,但仍然有效。 對於快速搜尋或不想接觸終端的用戶來說非常方便。它可以很好地融入圖形環境的日常工作流程中。

透過結合這些圖形化和控制台選項,您將擁有 所有必要的工具,用於在 Linux 檔案和目錄中搜尋文本,而不會迷失方向。從典型的錯誤日誌到包含數百個檔案的大型專案的程式碼。

掌握 Linux 中的文字搜尋技巧,提升工作效率

擁有類似這樣的命令 grep、find、awk、sed 和 ack 在處理複雜專案和大量資訊時能為你帶來巨大的優勢。每個工具都發揮著自己的作用:grep 用於在文件中查找模式,find 用於查找相應的文件和目錄,awk 和 sed 用於處理和轉換文本,ack 用於加快程式碼樹中的工作速度。

當你逐漸習慣使用這些工具時, 以前需要幾分鐘甚至幾小時才能完成的任務,現在只需幾秒鐘就能完成。處理日誌、配置或原始程式碼也會變得更加順暢。最終目標是逐步將這些命令融入你的日常工作流程中,使其成為一種本能反應。

無論你之前使用的是 Windows、macOS,還是已經使用 Linux 多年,都沒關係: 學會有效地在文件和目錄中搜尋文本,是一項從第一天起就能派上用場的技能。.

如何使用字串提取二進位檔案中的隱藏文本
相關文章:
如何使用字串提取二進位檔案中的隱藏文本