Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 三大文字處理神器:grep、sed、awk 完整指南

編輯:Linux 系統常見問題解答

前言

在 Linux 系統管理與腳本開發中,grep、sed、awk 是處理文字資料的核心工具。本文系統整理三者的常用參數、語法與實戰範例,助你快速上手。

grep - 文本搜尋利器

用途

使用正則表達式搜尋文本,輸出匹配行。全稱 Global Regular Expression Print。

常用參數

參數說明
-n顯示行號
-v反向匹配(顯示不包含的行)
-i忽略大小寫
-l僅列出檔案名
-E使用擴展正則表達式
-w全字匹配

範例

# 在檔案中搜尋 error,顯示行號
grep -n "error" /var/log/syslog

# 遞迴搜尋目錄下所有 .conf 檔案包含 port 80 的行
grep -r "port 80" /etc/*.conf

sed - 流編輯器

用途

針對整行進行編輯(刪除、新增、替換、列印),適合批次修改檔案。

常用選項

選項說明
-n靜默模式,僅輸出經處理的行
-f script從檔案讀取編輯指令
-i直接修改原檔案(慎用)

常用動作

動作說明
a\\text在匹配行之後新增行
c\\text取代匹配行
d刪除匹配行
i\\text在匹配行之前插入行
p列印匹配行(常搭配 -n)
s/old/new/g全域替換

範例

# 將檔案中所有 http 替換為 https,直接修改檔案
sed -i 's/http:/https:/g' config.txt

# 刪除第 10 到 20 行
sed -i '10,20d' file.txt

# 只列印包含 error 的行
sed -n '/error/p' log.txt

awk - 資料處理與報表產生器

用途

可作為程式語言使用,擅長欄位切割、格式化輸出、統計運算。

核心概念

  • FS / -F:輸入欄位分隔符
  • OFS:輸出欄位分隔符
  • NR:目前記錄號(行號)
  • $1, $2...:第 1、2... 個欄位
  • $0:整行內容

實戰範例

1. 擷取 /etc/passwd 特定欄位

cat -n /etc/passwd | awk -F ":" '{print $1 "\t" $3 "\t" $4}'

2. 格式化輸出並加上標題

cat /etc/passwd | awk '
BEGIN {FS=":"; printf "%-5s %-15s %-10s %-10s\n", NR, "username", "userid", "groupid"}
{printf "%-5s %-15s %-10s %-10s\n", NR, $1, $3, $4}
END {print "finish"}'

3. 篩選硬連結數大於 5 的檔案

ll | awk '$2 > 5 {print $0}'

4. 計算成績總分與平均

cat score.txt | awk '
BEGIN {FS="|"; print "MY Score List"}
NR==1 {print $0 "Sum" FS "Average" FS}
NR>1 {sum=$2+$3+$4+$5+$6; avg=sum/5; print $0 sum FS avg FS}
END {print "Finish"}'

輸出:

MY Score List
|Math|English|C++|OS|SE|Sum|Average|
|95 |89 |92 |98|99|374|74.8|
|66 |78 |82 |81|90|307|61.4|
|79 |65 |77 |82|35|303|60.6|
Finish

總結

  • grep:快速搜尋、過濾行
  • sed:行級編輯、批次替換
  • awk:欄位處理、統計、報表產生

三者常搭配管線(|)使用,例如 grep "error" log.txt | awk '{print $1}',發揮最大效能。

Copyright © Windows教程網 All Rights Reserved