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小教室!