Linux grep 搜尋檔案內容關鍵字

grep (Global Regular Expression Print) 是 Linux 最強大的文字搜尋工具。它可以在一個或多個檔案中,搜尋符合條件的字串,並把包含該字串的那一行印出來。

基本用法

grep [關鍵字] [檔案路徑]

範例

script.sh 檔案中搜尋包含 "error" 的行:

grep "error" script.sh

常用參數 (必學)

-i:忽略大小寫 (Ignore case)

預設是區分大小寫的。加上 -i 後,SEARCH、Search、search 都會被找到。

grep -i "error" server.log

-n:顯示行號 (Line number)

顯示關鍵字出現在檔案的第幾行。

grep -n "function" main.c

-r:遞迴搜尋目錄 (Recursive)

如果你不知道關鍵字在哪個檔案裡,可以直接指定「目錄」。grep 會幫你搜尋該目錄下(包含子目錄)的所有檔案。

# 在 /var/log 目錄下搜尋所有包含 "Example.com" 的內容
grep -r "Example.com" /var/log/

-v:反向搜尋 (Invert match)

顯示「不包含」關鍵字的那幾行。這在過濾雜訊時很好用。

# 顯示 config.php 內容,但不想看註解 (假設註解以 # 開頭)
grep -v "^#" config.php

-c:計算次數 (Count)

不顯示內容,只告訴你找到了幾行。

grep -c "404 Not Found" access.log

搭配 Pipe (|) 使用

grep 常常接在其他指令後面,用來過濾輸出結果。

# 用 ps 列出所有程序,再用 grep 篩選出 apache 相關的
ps aux | grep apache

# 用 ls 列出檔案,再篩選只顯示 .html 檔
ls -l | grep ".html"

進階:使用正規表示式 (Regex)

grep 支援正規表示式,這讓搜尋變得非常靈活。

  • ^:代表行首
  • $:代表行尾
  • .:代表任一個字元
# 找出行首是 "User" 的設定
grep "^User" /etc/ssh/sshd_config

# 找出行尾是 "php" 的行
grep "php$" files.list