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