《Linux – Ubuntu 如何使用grep搜尋文字檔案內的字串 – 學習筆記》

Telegram share !

相信很多系統維運人員都會處理到臨時要調整系統資訊,但是因為一台主機上有很多個設定檔案與程式碼,怕一不小心漏改到造成系統錯誤,這時候可以使用grep這個指令來輔助搜尋,在Linux中提供不少方便的grep函式供系統管理人員使用,但由於內建函式眾多,我只提供日常比較常用的函式供你參考,我也順便紀錄下來當作備忘錄,也希望藉由此次分享讓初學者能更快掌握相關語法。

測試資料

檔案名稱可以用furnituredb.txt,使用vim furnituredb.txt建立並將以下資料貼入即可開始測試

ID / Name / SN
F001 咖啡桌 6QY852V793UB
F002 餐桌 NA7L27342OZB
F003 邊桌 680H92L6Q0TM
F004 茶几 Q3CWQQ80JBHH
F005 木頭餐桌 3M3VEFHK744N
F006 柚木餐桌 UI3GK6PR3Y36

grep基本用法:

1.搜尋特定檔案內的關鍵字

grep “關鍵字” 檔案名稱

# 基本搜索: 使用 grep 来搜索包含指定文本的行。
[email protected]:/home/ubuntu# grep "桌" furnituredb.txt 
F001 咖啡桌 6QY852V793UB
F002 餐桌 NA7L27342OZB
F003 邊桌 680H92L6Q0TM
F005 木頭餐桌 3M3VEFHK744N
F006 柚木餐桌 UI3GK6PR3Y36
0001 長桌 6M3VEFHK788N

2.搜尋特定目錄下所有檔案,包含關鍵字的檔案找出來

grep -r “關鍵字” 目錄名稱

#使用 -r 選項可以針對資料夾內的文字檔案做遞迴搜索,找出包含指定關鍵字的檔案。
[email protected]:/home/ubuntu# grep -r  "桌" /home/ubuntu/
/home/ubuntu/furnituredb.txt:F001 咖啡桌 6QY852V793UB
/home/ubuntu/furnituredb.txt:F002 餐桌 NA7L27342OZB
/home/ubuntu/furnituredb.txt:F003 邊桌 680H92L6Q0TM
/home/ubuntu/furnituredb.txt:F005 木頭餐桌 3M3VEFHK744N
/home/ubuntu/furnituredb.txt:F006 柚木餐桌 UI3GK6PR3Y36

3.搜尋特定檔案內的關鍵字並且忽略大小寫

grep -i “關鍵字” 檔案名稱

# 使用 -i 選項可以忽略搜索時的大小寫差異
[email protected]:/home/ubuntu# grep -r  "桌" /home/ubuntu/
/home/ubuntu/furnituredb.txt:F001 咖啡桌 6QY852V793UB
/home/ubuntu/furnituredb.txt:F002 餐桌 NA7L27342OZB
/home/ubuntu/furnituredb.txt:F003 邊桌 680H92L6Q0TM
/home/ubuntu/furnituredb.txt:F005 木頭餐桌 3M3VEFHK744N
/home/ubuntu/furnituredb.txt:F006 柚木餐桌 UI3GK6PR3Y36

4.使用正則運算式搜尋

grep -E “正則運算式” 檔案名稱

# 使用 -E or -P 選項可以啟用正則運算式搜索
[email protected]:/home/ubuntu# grep -E "^[0-9]" furnituredb.txt 
0001 長桌 6M3VEFHK788N

5.使用反向搜尋

grep -v “不想被搜尋出來的關鍵字” 檔案名稱

# 使用 -v 選項可以找出不想被搜尋出來的關鍵字之外的紀錄
[email protected]:/home/ubuntu# grep -v "邊桌" furnituredb.txt 
ID / Name / SN
F001 咖啡桌 6QY852V793UB
F002 餐桌 NA7L27342OZB
F004 茶几 Q3CWQQ80JBHH
F005 木頭餐桌 3M3VEFHK744N
F006 柚木餐桌 UI3GK6PR3Y36
0001 長桌 6M3VEFHK788N

6.顯示行號

grep -n “關鍵字” 檔案名稱

# 使用 -n 選項可以找出被搜尋出來的關鍵字並顯示行號
[email protected]:/home/ubuntu# grep -n "邊桌" furnituredb.txt 
4:F003 邊桌 680H92L6Q0TM

7.ls顯示特定關鍵字的檔案

ls -l | grep 關鍵字

# 使用 -l | grep 關鍵字 選項可以找出被搜尋出來的關鍵字並顯示行號
[email protected]:/home/ubuntu#  ls -l | grep furnituredb
-rw-r--r-- 1 root root  205 Sep 18 03:13 furnituredb.txt

常用的正則運算式範例

.:匹配任何單個字元

grep “a.ple”:搜尋如 “apple”、”ample”

[abc]:匹配字元集中的任何一個字元

grep “[aeiou]”:搜尋包含任何母音字母的行。

[a-z]:匹配從 ‘a’ 到 ‘z’ 之間的任何字元

grep “[0-9]”:搜尋包含數字的資料行。

[^abc]:匹配不在字元集中的任何字元

grep “[^0-9]”:搜尋不包含數字的資料行

*:匹配前一個字元的零個或多個重複
+:匹配前一個字元的一個或多個重複

grep “ap*le”:搜尋如 “ale”、”apple”、”appple” 等的資料行

{n}:匹配前一個字元的精確重複 n 次
{n,}:匹配前一個字元至少重複 n 次
{n,m}:匹配前一個字元重複 n 到 m 次

grep “ap{2}le”:搜尋如 “apple” 之類的行,但不匹配 “ale”

^:匹配行的開頭
$:匹配行的末尾

grep “^apple”:搜尋以 “apple” 開頭的資料行
grep “apple$”:搜尋以 “apple” 結尾的資料行

\b:匹配單詞邊界

grep “\bword\b”:搜尋包含獨立單字 “word” 的資料行

Reference