在Ubuntu(以及大多數Linux系統)中,grep是一個非常實用的文本搜索工具。它能幫我們快速在文件中找到包含特定關鍵詞的內容,或者從命令輸出中過濾信息。即使你是剛接觸Linux的新手,也能輕鬆上手。
一、grep是什麼?¶
簡單說,grep的全稱是“Global Regular Expression Print”(全局正則表達式打印),它的核心功能就是在文本中搜索匹配的行。你可以把它理解成一個“文本過濾器”,通過關鍵詞幫你精準定位信息。
二、基本用法:最簡單的文本搜索¶
語法格式¶
grep "關鍵詞" 文件名
示例¶
假設你有一個名爲test.txt的文件,內容如下:
I love Ubuntu!
Ubuntu is great.
Learning Linux is fun.
ubuntu is user-friendly.
現在想找包含“ubuntu”的行,直接輸入:
grep "ubuntu" test.txt
輸出結果:
I love Ubuntu!
ubuntu is user-friendly.
注意:默認情況下,grep是區分大小寫的(即“Ubuntu”和“ubuntu”會被視爲不同內容)。如果想忽略大小寫,後面會介紹參數。
三、常用參數:讓搜索更靈活¶
grep有很多參數幫你定製搜索規則,以下是初學者最常用的幾個:
1. 忽略大小寫(-i)¶
有時候關鍵詞的大小寫不確定(比如“Ubuntu”和“ubuntu”),可以用-i參數忽略大小寫。
grep -i "ubuntu" test.txt
輸出結果:
I love Ubuntu!
ubuntu is user-friendly.
(因爲-i會把“Ubuntu”和“ubuntu”都視爲匹配)
2. 顯示行號(-n)¶
想知道關鍵詞在文件的第幾行?用-n參數。
grep -n "is" test.txt
輸出結果:
2:Ubuntu is great.
3:Learning Linux is fun.
(每行前面會顯示行號,方便定位)
3. 反向查找(-v)¶
如果想排除包含關鍵詞的行,只顯示不含關鍵詞的內容,用-v。
grep -v "is" test.txt
輸出結果:
I love Ubuntu!
Learning Linux is fun. # 注意:這裏“is”在第3行,所以會被排除?
Wait,原文件第3行是“Learning Linux is fun.”,包含“is”,所以反向查找會排除它,輸出:
I love Ubuntu!
Ubuntu is great. # 第2行包含“is”,也被排除?
Wait,原文件內容:
1. I love Ubuntu!
2. Ubuntu is great.
3. Learning Linux is fun.
所以`grep -v "is"`會排除所有包含“is”的行,輸出:
I love Ubuntu!
哦對,第2行和第3行都有“is”,所以反向查找後只剩下第1行了。
4. 只顯示匹配內容(-o)¶
如果只想看到關鍵詞本身,而不是整行,用-o。
grep -o "Ubuntu" test.txt
輸出結果:
Ubuntu
ubuntu
(只顯示匹配到的“Ubuntu”和“ubuntu”,每行一個)
5. 統計匹配行數(-c)¶
想快速知道有多少行包含關鍵詞,用-c。
grep -c "Ubuntu" test.txt
輸出結果:
2
(原文件中有2行包含“Ubuntu”)
四、進階技巧:讓grep更強大¶
1. 遞歸搜索目錄(-r)¶
如果要搜索整個文件夾及其子文件夾中的文件,用-r(recursive)。
grep -r "error" ./my_project # 搜索當前目錄下my_project文件夾中的所有文件
參數說明:./my_project表示目標目錄,.表示當前目錄。
2. 多文件搜索¶
一次搜索多個文件,直接把文件名列出來即可。
grep "python" file1.txt file2.txt file3.txt
grep會依次在每個文件中搜索,並顯示文件名和匹配的行。
3. 結合管道(|)使用¶
grep可以和其他命令配合,從命令輸出中過濾內容。比如用ls列出所有文件,然後篩選出包含“txt”的文件:
ls | grep "txt"
原理:ls的輸出會通過管道(|)傳給grep,grep會在其中查找包含“txt”的內容。
五、總結¶
grep是Ubuntu中最基礎也最實用的文本搜索工具,掌握以下幾點就能快速上手:
- 基本用法:grep "關鍵詞" 文件名
- 核心參數:-i(忽略大小寫)、-n(顯示行號)、-v(反向查找)、-r(遞歸搜索)
- 常用場景:快速定位文件內容、過濾命令輸出、統計匹配行數
多練習幾次不同參數的組合,你會發現grep能極大提高文本處理效率!如果想進一步學習,可以嘗試結合正則表達式(比如匹配郵箱、IP等),但基礎用法已經能解決大部分日常需求。