Linux 系統管理離不開文本處理,而 Shell 提供了豐富且強大的工具鏈。本文系統梳理了 find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk 等最常用的文本處理命令,並附上高頻實用範例,幫助你快速上手、靈活組合,解決實際運維與開發場景中的文本分析需求。
find 不僅能按名稱、類型、時間、大小、權限、擁有者查找文件,還能配合 -exec 或 xargs 執行後續操作(刪除、複製、變更屬主等)。
find . \( -name "*.txt" -o -name "*.pdf" \) -printfind . -regex ".*\(\.txt|\.pdf\)$"(-iregex 忽略大小寫)find . ! -name "*.txt" -printfind . -maxdepth 1 -type f 僅列出當前目錄文件-type f 文件、d 目錄、l 符號鏈接-atime 訪問、-mtime 修改、-ctime 狀態變更(單位:天;分鐘用 -amin 等)find . -type f -size +2k(單位:k、M、G)-perm 644、-user weberfind . -type f -name "*.swp" -delete-exec 執行命令: find . -type f -user root -exec chown weber {} \;({} 會被替換為匹配的文件名)find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;-exec ./commands.sh {} \;-print0 配合 xargs -0(以 \0 為定界符)grep 支援正則表達式,可遞歸搜索目錄、統計行數、顯示行號、忽略大小寫、只輸出文件名等。
| 參數 | 說明 |
|---|---|
-o | 只輸出匹配部分 |
-v | 反向匹配 |
-c | 統計匹配次數 |
-n | 顯示行號 |
-i | 忽略大小寫 |
-l | 只列出文件名 |
-R | 遞歸搜索目錄 |
-e | 指定多個模式 |
-z | 以 \0 結尾輸出文件名(配合 xargs -0) |
grep "class" . -R -ngrep -e "class" -e "virtual" filegrep "test" file* -lZ | xargs -0 rm擅長將多行合併為單行、或將單行拆分為多行,配合 find、grep 極其強大。
cat file.txt | xargs:多行轉單行(預設以空白/換行分隔)cat single.txt | xargs -n 3:單行按 3 欄拆分-d 自定義定界符、-I {} 替換字符串、-0 以 \0 分隔find source_dir/ -type f -name "*.cpp" -print0 | xargs -0 wc -lsort -nrk 1 data.txt:按第 1 欄數值逆序sort -bd data:忽略前導空白、字典序sort unsort.txt | uniq:去重sort unsort.txt | uniq -c:統計出現次數sort unsort.txt | uniq -d:僅顯示重複行echo 12345 | tr '0-9' '9876543210':字符映射替換cat text | tr '\t' ' ':製表符轉空格tr -d '0-9':刪除數字;tr -c '0-9':保留數字(補集)tr -s ' ':壓縮連續空格[:alnum:]、[:alpha:]、[:digit:]、[:space:]、[:lower:]、[:upper:] 等,用法 tr '[:lower:]' '[:upper:]'cut -f2,4 filename:取第 2、4 列cut -f3 --complement filename:排除第 3 列-d ";" 指定分隔符N-(第 N 欄到尾)、-M(開頭到第 M 欄)、N-M(區間)paste:合併多文件列(預設 Tab 分隔)wc -l/-w/-c:統計行/詞/字節數sed:流編輯器,支援地址定位、替換、刪除、插入等awk:強大的文本處理語言,按模式-動作處理,內建變數(NR、NF、$0、$1…)|)與 xargs 組合小工具,避免造大輪子。-print0 / -0。-S 指定緩存、或用 sort -u 直接去重。