Linux教學:grep正規表示法,強大的關鍵字搜尋技

Linux執行命令或者檢視文件時,常常要針對文字資料進一步的篩選查找,這部分最常使用的是正規表示法,本文以簡單範例介紹grep這個強大命令的基本用法。

一、cat檢視文字檔

範例是論語前幾段的文字,首先用「cat」命令查看「論語.txt」這個檔案,便可以瞭解文字檔的內容。

關於Linux系統如何以cat等命令檢視文件,可以參考贊贊小屋相關文章

Linux教學:grep正規表示法,強大的關鍵字搜尋技 1

二、grep關鍵字查找

「grep」命令最基本且核心的功能是關鍵字查找,例如在這裡以「子曰」作為關鍵字,可以找到一共有5行內容是符合這個關鍵字條件。

Linux教學:grep正規表示法,強大的關鍵字搜尋技 3

三、grep -n加上行號

在找到關鍵字的基礎上可以進一步設定參數,例如這裡的「-n」代表要加上行號的意思,因此這裡的『子曰:「學而時習之…」』是在原始文件的第五行。

Linux教學:grep正規表示法,強大的關鍵字搜尋技 5

四、命令參數合併

接下來補充幾個常用參數,例如「-c」是計算有多少筆資料符合條件;「-v」代表反過來,如果原來是查找「子曰」作為條件,加上「-v」就會查找不含子曰的內容,此外不同參數還能合併起來,例如「-cv」作用是統計次數,而且是反過來尋找不符合條件的資料筆數。

Linux教學:grep正規表示法,強大的關鍵字搜尋技 7

五、^符號首字查找

除了以關鍵字查找,實務上常常會用首字碼作為條件進行查找,熟悉Excel的讀者應該知道這方面是屬於萬用字元「*」的用法,而Linux grep命令的首字碼查找是在關鍵字前面加一個「^」向上符號,如同截圖所示便會查找到以「子曰」開頭的內容,比較先前第二步驟關鍵字查找的結果,像「有子曰」、「曾子曰」這樣的內容雖然「子曰」符合關鍵字,但並非以「子曰」開頭,因此不符合條件。

關於Excel如何使用萬用字元,可以參考贊贊小屋相關文章

Linux教學:grep正規表示法,強大的關鍵字搜尋技 9

六、$符號末字查找

除了首字查找,當然也可以進行末字查找,grep命令是使用特殊符號「$」表示,例如在這裡要尋找「君子乎」結尾的內容,正常是輸入:『”君子乎?$」”』,但是卻發現沒有任何結果,這是因為原始文件的問號「?」是全形的「?」,所以輸入半形的話會查找不到,而第2次改成全形的「?」:『”君子乎?$」”』,便可以找到想要的結果。

Linux教學:grep正規表示法,強大的關鍵字搜尋技 11

七、空白列查找排除

先前第四步驟提到把不同參數合併起來使用,而不同的查找符號,例如首字查找和末字查找也可以合併起來:「”^$”」,其作用是會把空白列或者說空白行查找出來,後面如果再加一個參數「-c」會計算出文件中有7行空白列,進一步配合「-v」進行條件反轉,實質上便是排除空白列。由於在實務上原始文件常常會有許多用於排版的空白列,而在檢視內容資料時並不需要,因此這裡介紹的正規表示法非常好用。

Linux教學:grep正規表示法,強大的關鍵字搜尋技 13

Linux grep正規表示法

Linux的grep命令全名可以簡單理解為「Global Regular Expression and Print),中文通常稱之為正規表示法,本文介紹最常用到的查找條件以及參數,透過文章簡單範例應該能體會到它是非常強大的關鍵字搜尋技能,因此類似的查找機制幾乎在所有主流的程式語言都有,例如python的re套件,甚至是Office Excel或Google試算表工具都可以使用類似的功能,而除了這篇文章所介紹用法,Linux正規表示法還有其他許多的查找條件以及查找符號的規則,並且主要是在和其他的Linux命令搭配使用,這部分後續有適當的範例再繼續分享。

每天學習,每天充電:Linux文章合集

Linux教學:grep正規表示法,強大的關鍵字搜尋技 15
歡迎加入Line社群,口袋裡的VBA小教室!
Ask ChatGPT
Set ChatGPT API key
Find your Secret API key in your ChatGPT User settings and paste it here to connect ChatGPT with your Tutor LMS website.