一.why
為什麼要在使用linux的時候使用正規表示式,因為linux中經常有檢索目錄或者檢索檔案內容的操作,而正規表示式在字串匹配和替換方面有著強大的功能,能夠提高我們的工作效率。舉兩個簡單的例子。
(1)特定檔案的檢索
筆者今天剛好想要看看在cuda的lib目錄下有沒有libcudnn檔案,但是該目錄下的檔案很多,直接看很難看出來,所以我們可以利用正規表示式來進行匹配,找出符合條件的檔案。命令如下:
(2)文字內容的檢索
筆者想要檢視caffe的makefile.config檔案中和cuda有關的配置,同時那些已經被注釋掉的行不希望被列印出來。命令如下:
這樣注釋的內容中即使有cuda也不會列印出來。
而除了用在命令中,正規表示式在shell指令碼中也發揮著重要的作用
二.what
linux的正則表達是怎麼樣的?
其實大部分的語法和《必知必會》講的差不多,在這裡以**的形式整理出來,方便檢視。
參考鳥哥的書,這裡分為基礎正規表示式和擴充套件正規表示式
2.1基礎正規表示式:
(1)基礎正規表示式字元
(2)特殊符號
2.2擴充套件正規表示式
擴充套件的正規表示式能夠實現更多的組合功能,從而減少檢索的次數
(1)擴充套件正規表示式字元
三 、how
複習了正規表示式的之後,我們需要知道該如何在linux中使用正規表示式。下面同樣是分為基礎和擴充套件兩個部分來講
3.1 基礎正規表示式在linux中的使用
可以使用正規表示式的常見命令有grep和 sed。grep和sed的區別在於,grep是以行為單位,進行字串的對比,sed則可以進行刪除、替換等更多的功能。
(1)grep
grep使用正規表示式的格式非常簡單
格式:grep [-n] [-a] [-b] [--color==auto] '搜尋的字串' filename
-n 表示 顯示列印出來的資料的行號
-a 後加數字,是after的意思,列印該行和後面的n行
-b 後加數字,是befer的意思,列印該行和前面的n行
『搜尋字串』即是正規表示式。
此外,grep 加上-v可以用於取反,即列印出不符合檢索條件的行的資料。
(2)sed [-nefri] [動作]
n :使用安靜(silent)模式。在一般 sed 癿用法中,所有來自 stdin 的資料一般都會被列出到螢幕上。但如果加上 -n 引數後,則只有經過 sed 特殊處理癿那一行(或者動作)才會被列出來。
-f :直接將 sed 的動作寫在乙個檔案內,
-f filename 則可以執行 filename 內的sed 動作;
-r :sed 的動作支援的是延伸行正規表示法的語法。(預設是基礎型正規表達法)
-i :直接修改讀的檔案內容,而不是由螢幕輸出。
動作說明: [n1[,n2]]function
n1, n2 不見得會存在,一般代表選擇進行動作癿行數,舉例來說,如果我的動作是需要在 10 到 20 行之間進行的,則 10,20[動作行為] function下有以下的引數可以選擇
a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)
c:取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行
d :刪除,因為是刪除,所以 d 後面通常不接任何東西;
i :插入, i的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,亦即將某個選擇的資料印出。通常 p 會不引數 sed -n 一起運作
s :替代,可以直接執行替代的工作!通常這個 s的動作作可以搭配正則表示法!例如 1,20s/old/new/g 就是啦!
sed的寫法看起來複雜一點,需要結合一些例項去理解和使用。
3.2擴充套件正規表示式
需要實用egrep命令才能使用擴充套件的正規表示式,命令和用法和grep類似。
參考文獻
《鳥哥的linux私飯菜》
《正規表示式必知必會》
在UltraEdit中使用正規表示式
在ultraedit中使用正規表示式 刪除空行 替換 t p 為 空串 刪除行尾空格 替換 t 為 空串 刪除行首空格 替換 t 為 空串 每行設定為固定的4個空格開頭 替換 t t p 為 1 每段設定為固定的4個空格開頭 替換 t 為 如果一行是以空格開始的,則視之為一段的開始行 將一段合併為一...
在DELPHI中使用正規表示式
在網上發現,有多種方法可在delphi中使用正規表示式。竊以為直接使用微軟的regexp物件會比較簡單,無需額外工作。使用微軟regexp方法 2.註冊vbscript.dll regsvr32 命令,若安裝過vb或ie5以上會預設安裝該dll 3.在delphi中引入 microsoft vbsc...
在UltraEdit中使用正規表示式
刪除空行 替換 t p 為 空串 刪除行尾空格 替換 t 為 空串 刪除行首空格 替換 t 為 空串 每行設定為固定的4個空格開頭 替換 t t p 為 1 每段設定為固定的4個空格開頭 替換 t 為 如果一行是以空格開始的,則視之為一段的開始行 將一段合併為一行 替換 t p t p 為 1 注意...