| 將前一命令的 標準輸出 (stdout) 傳遞給後一命令的 標準輸入 (stdin)。不處理標準錯誤 (stderr),需用 2>&1 重導向。右側命令必須支援 stdin 流式處理(如文本處理工具)。
cut -d ':' -f 1,3 /etc/passwd # 以 : 分隔,取第 1、3 欄
cut -c 1-10 file.txt # 按字符位置擷取 1-10 字元
ls -l | cut -c 1-10 # 管道接收 ls 輸出
grep -i "error" /var/log/syslog # 忽略大小寫搜尋
grep -n "pattern" file # 顯示行號
grep -v "exclude" file # 反向匹配(排除)
ps aux | grep nginx # 管道過濾進程
sort file.txt # 字典序排序
sort -n numbers.txt # 數值排序
sort -r file.txt # 反向排序
sort -t ':' -k 3 /etc/passwd # 按第 3 欄排序
sort -u file.txt # 排序並去重(等同 sort | uniq)
sort file.txt | uniq # 必須先排序
sort file.txt | uniq -c # 顯示重複次數
sort file.txt | uniq -d # 僅顯示重複行
sort file.txt | uniq -u # 僅顯示唯一行
wc -l file.txt # 行數
wc -w file.txt # 單詞數
wc -m file.txt # 字符數
cat /etc/passwd | wc -l # 統計用戶數
echo "log" | tee -a log.txt # 同時輸出螢幕並追加寫入檔案
ls -l | tee filelist.txt | grep "txt" # 存檔同時繼續管道
echo "HELLO" | tr 'A-Z' 'a-z' # 大小寫轉換
cat file | tr -d '\r' # 刪除 ^M (Windows 換行)
cat file | tr -s ' ' # 壓縮連續空格為單個
join -t ':' -1 1 -2 1 file1 file2 # 以 : 分隔,按兩文件第 1 欄關聯
# 前提:兩文件需先按關聯鍵排序
paste file1 file2 # Tab 分隔合併
paste -d ':' file1 file2 # 指定分隔符
paste - - < file.txt # 將單列轉為兩列
expand -t 4 file.txt # Tab 展開為 4 空格
split -b 100M bigfile part_ # 按大小分割
split -l 1000 bigfile part_ # 按行數分割
cat part_* > bigfile # 合併還原
find . -name "*.log" | xargs rm -f # 批量刪除
ls *.txt | xargs -n 2 mv -t backup/ # 每 2 個參數執行一次 mv
echo "a b c" | xargs -n 1 echo # 每行一個參數
# -0 配合 find -print0 處理特殊文件名
# 統計日誌中出現最多的前 10 個 IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
# 查找佔用磁碟最大的 5 個目錄
du -h --max-depth=1 | sort -hr | head -5
# 批量重命名:將 .htm 後綴改為 .html
ls *.htm | xargs -I {} mv {} {}.html
管道是 Linux 「小工具組合大功能」哲學的體現。熟練掌握 cut/grep/sort/uniq/wc/tee/tr/join/paste/split/xargs 及其常用參數,能將複雜文本處理任務拆解為優雅的一行命令。建議多實戰、多組合,養成「管道思維」。