文字處理是 Linux 系統管理核心技能。本文彙整 grep 搜尋、sed 流編輯、find + perl 跨檔案批次、vim 互動式替換的完整語法、常用範例與最佳實踐,供快速查閱與腳本撰寫參考。

# 遞迴搜尋關鍵字,顯示行號、檔名
grep -rn "keyword" ./
# 僅列出符合的檔名
grep -rl "keyword" ./
# 反向匹配 (排除)
grep -v "^#" file.conf | grep -v "^$"
# 固定字串 (不解析正則,速度快)
grep -F "literal.string" ./
# 統計匹配行數
grep -c "error" /var/log/syslog
| 任務 | 指令 | 說明 |
|---|---|---|
| 全域替換 (原地修改) | sed -i 's/old/new/g' file |
-i 就地修改,g 行內全部 |
| 批次替換多檔 (配合 grep) | sed -i 's/old/new/g' $(grep -rl "old" .) |
先找檔再改,避免改到二進位檔 |
| 刪除行首空白 | sed 's/^[[:space:]]*//g' file |
[[:space:]] 包含空格、Tab |
| 匹配行後插入新行 | sed '/pattern/a\\new line' file |
a\\ 附加 (append) |
| 匹配行前插入新行 | sed '/pattern/i\\new line' file |
i\\ 插入 (insert) |
| 首行插入 | sed -i '1i\\header' file |
|
| 末行插入 | sed -i '$a\\footer' file |
|
| 使用變數替換 (雙引號) | sed -e "s/$var1/$var2/g" file |
Shell 先展開變數再傳給 sed |
| 刪除空行、空白行、註解行 | grep -v '^#' file | sed '/^[[:space:]]*$/d' |
管道串聯 |
# 當前目錄所有 .txt 替換
find -name '*.txt' | xargs perl -pi -e 's|old|new|g'
# 遞迴所有 .html 替換
find . -type f -name '*.html' | xargs perl -pi -e 's|old|new|g'
# perl 優勢: 正則功能最強、支援 Unicode、單行指令即可完成複雜邏輯
perl -pi -e 's/\b(\d{4})-(\d{2})-(\d{2})\b/$3.$2.$1/g' *.log # 日期格式轉換
| 範圍 | 指令 | 說明 |
|---|---|---|
| 當前行 | :s/old/new/g |
|
| 全檔 | :%s/old/new/g |
% 代表所有行 |
| 視覺選取區塊 | V 選取 → :s/old/new/g |
自動帶入 '<,'> |
| 指定行號範圍 | :10,31s/old/new/g |
|
| 確認式替換 | :%s/old/new/gc |
c 逐個確認 (y/n/a/q/l) |
| 顯示/隱藏行號 | :set nu / :set nonu |
sed -ifind | xargs perl -pivimgrepawk、jq、csvkit、millercp -r target_dir target_dir.baksed 's/old/new/g' file (無 -i) 或 perl -pe 's/old/new/g' filegrep -rl 確認影響檔案清單find -type f -exec file {} \\; | grep -v text熟練組合這五大工具,即可應對 99% 的 Linux 文字處理需求。