萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux Shell 文本處理命令大全:find、grep、sed、awk 等核心工具詳解

Linux 系統管理離不開文本處理,而 Shell 提供了豐富且強大的工具鏈。本文系統梳理了 find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk 等最常用的文本處理命令,並附上高頻實用範例,幫助你快速上手、靈活組合,解決實際運維與開發場景中的文本分析需求。

一、find —— 文件查找利器

find 不僅能按名稱、類型、時間、大小、權限、擁有者查找文件,還能配合 -exec 或 xargs 執行後續操作(刪除、複製、變更屬主等)。

常用查找模式

  • 按副檔名查找: find . \( -name "*.txt" -o -name "*.pdf" \) -print
  • 正則匹配: find . -regex ".*\(\.txt|\.pdf\)$"(-iregex 忽略大小寫)
  • 排除條件: find . ! -name "*.txt" -print
  • 限制深度: find . -maxdepth 1 -type f 僅列出當前目錄文件
  • 按類型: -type f 文件、d 目錄、l 符號鏈接
  • 按時間: -atime 訪問、-mtime 修改、-ctime 狀態變更(單位:天;分鐘用 -amin 等)
  • 按大小: find . -type f -size +2k(單位:k、M、G)
  • 按權限/用戶: -perm 644、-user weber

查找後的動作

  • 直接刪除: find . -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 —— 文本搜索標準工具

grep 支援正則表達式,可遞歸搜索目錄、統計行數、顯示行號、忽略大小寫、只輸出文件名等。

高頻參數

參數說明
-o只輸出匹配部分
-v反向匹配
-c統計匹配次數
-n顯示行號
-i忽略大小寫
-l只列出文件名
-R遞歸搜索目錄
-e指定多個模式
-z以 \0 結尾輸出文件名(配合 xargs -0)

實用範例

  • 遞歸搜索代碼:grep "class" . -R -n
  • 多模式:grep -e "class" -e "virtual" file
  • 刪除包含關鍵字的文件:grep "test" file* -lZ | xargs -0 rm

三、xargs —— 將標準輸入轉為命令行參數

擅長將多行合併為單行、或將單行拆分為多行,配合 find、grep 極其強大。

  • cat file.txt | xargs:多行轉單行(預設以空白/換行分隔)
  • cat single.txt | xargs -n 3:單行按 3 欄拆分
  • -d 自定義定界符、-I {} 替換字符串、-0 以 \0 分隔
  • 統計 C++ 代碼行數:find source_dir/ -type f -name "*.cpp" -print0 | xargs -0 wc -l

四、sort & uniq —— 排序與去重

  • sort -nrk 1 data.txt:按第 1 欄數值逆序
  • sort -bd data:忽略前導空白、字典序
  • sort unsort.txt | uniq:去重
  • sort unsort.txt | uniq -c:統計出現次數
  • sort unsort.txt | uniq -d:僅顯示重複行

五、tr —— 字符轉換/刪除/壓縮

  • 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 —— 按列切分

  • cut -f2,4 filename:取第 2、4 列
  • cut -f3 --complement filename:排除第 3 列
  • -d ";" 指定分隔符
  • 範圍語法:N-(第 N 欄到尾)、-M(開頭到第 M 欄)、N-M(區間)

七、paste、wc、sed、awk —— 進階組合

  • paste:合併多文件列(預設 Tab 分隔)
  • wc -l/-w/-c:統計行/詞/字節數
  • sed:流編輯器,支援地址定位、替換、刪除、插入等
  • awk:強大的文本處理語言,按模式-動作處理,內建變數(NR、NF、$0、$1…)

最佳實踐建議

  1. 單行命令解決簡單任務;複雜邏輯請改用 Python/Perl 腳本。
  2. 善用管道(|)與 xargs 組合小工具,避免造大輪子。
  3. 處理含空格/特殊字符文件名時,統一用 -print0 / -0。
  4. 大文件排序加 -S 指定緩存、或用 sort -u 直接去重。

Linux Shell 文本處理命令圖解

copyright © 萬盛學電腦網 all rights reserved