首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux find 與 grep 指令實戰指南:從檔案搜尋到內容過濾

     編輯:關於C語言

前言

在 Linux 系統管理與開發日常中,find 與 grep 是最核心的檔案搜尋與內容過濾工具組合。本文系統整理兩者常用參數、組合技巧與正則表達式應用,助你高效定位目標檔案與內容。

一、find 指令核心用法

1. 基礎搜尋語法

find [搜尋路徑] [選項] [搜尋條件] [執行動作]

2. 常用搜尋維度與範例

搜尋目標指令範例說明
檔名find / -name "httpd.conf"從根目錄遞歸搜尋完全匹配檔名
檔名模糊find . -name "*.log"當前目錄下搜尋所有 .log 結尾檔案
檔案內容find . -name "*.*" | xargs grep 'keyword'配合 grep 搜尋檔案內含關鍵字的檔案
多條件find . \( -name "*.txt" -o -name "*.pdf" \) -print搜尋 .txt 或 .pdf 檔案,括號需轉義

3. 進階過濾參數速查

參數功能範例
-type f/d/l檔案類型:普通檔/目錄/符號連結find / -type f -name "*.conf"
-size +100M檔案大小大於 100MBfind /var/log -size +100M
-mtime -77 天內修改過的檔案find /home -mtime -7
-user username屬於指定用戶find / -user nginx
-maxdepth 3限制遞歸深度find . -maxdepth 2 -name "*.py"
-delete直接刪除匹配檔案(慎用)find /tmp -name "*.tmp" -delete

二、grep 指令核心用法

1. 基礎語法

grep [選項] '搜尋模式' [檔案...]

2. 常用參數速查

參數功能範例
-i忽略大小寫grep -i "error" /var/log/syslog
-n顯示行號grep -n "TODO" *.c
-v反向匹配(顯示不含模式的行)grep -v "^#" config.ini
-r遞歸搜尋目錄grep -r "function" src/
-c僅統計匹配行數grep -c "ERROR" app.log
-A 2 -B 2顯示匹配行前後各 2 行grep -A 2 -B 2 "exception" log.txt
-l僅列出匹配的檔案名grep -rl "API_KEY" .
-E使用擴展正則表達式grep -E "(error|warn|fail)" log.txt

3. 正則表達式元字元速查

符號含義範例
^行首錨定^ERROR 匹配以 ERROR 開頭的行
$行尾錨定failed$ 匹配以 failed 結尾的行
.任意單一字元(除換行)gr.p 匹配 grep、grip 等
*前一字元 0 次或多次ab*c 匹配 ac、abc、abbc...
[]字元集合[Gg]rep 匹配 Grep 或 grep
[^]排除字元集合[^0-9] 匹配非數字字元
\{m,n\}前一字元出現 m 到 n 次0\{3,5\} 匹配 3~5 個 0
\b單詞邊界\broot\b 僅匹配完整單詞 root

三、黃金組合實戰場景

場景 1:尋找包含特定錯誤碼的近期日誌檔

find /var/log -name "*.log" -mtime -3 | xargs grep -n "500 Internal Server Error"

場景 2:清理專案中所有編譯產物

find . -type f \( -name "*.o" -o -name "*.obj" -o -name "*.exe" \) -delete

場景 3:搜尋含有 TODO/FIXME 註釋的原始碼並顯示上下文

grep -rn -A 2 -B 2 "TODO\|FIXME" src/ --include="*.c" --include="*.h"

場景 4:統計專案中各類檔案行數

find . -type f -name "*.[ch]" | xargs wc -l

四、效能優化建議

  • 優先使用 -maxdepth 限制搜尋深度,避免掃描無關目錄(如 /proc、/sys)。
  • 大量檔案配合 xargs 而非管道直接傳給 grep,減少進程啟動開銷:find ... -print0 | xargs -0 grep ...。
  • 固定字串搜尋加 -F(fgrep),禁用正則引擎提升速度。
  • 使用 --include/--exclude 縮小 grep 掃描範圍。

總結

find 負責「在哪裡找」,grep 負責「找什麼內容」。熟練掌握兩者參數與正則表達式,配合管道與 xargs,能解決 90% 以上的檔案與內容檢索需求。建議收藏本文速查表,實戰中靈活組合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved