介紹
Linux系統中grep命令是一種強大的文本搜尋工具,它能使用Regex搜尋文本,並把匹 配的行列印出來。grep全稱是Global Regular Expression Print,表示全域Regex版本,它的使用許可權是所有使用者。
grep [-acinv] [--color=auto] '尋找字串' filename
參數:
-a :將binary檔案以text檔案的方式尋找資料
-c :計算找到‘尋找字串'的次數
-i :忽略大小寫區別,即把大小寫視為相同
-n :順便輸出行號
-v :反向選擇,即顯示出沒有‘尋找字串'內容的那一行
-l :只顯示匹配的檔案,不顯示具體內容
-f<規則檔案> : 指定規則檔案,其內容含有一個或多個規則樣式,讓grep尋找符合規則條件的檔案內容,格式為每行一個規則樣式。
執行個體:
#取出檔案/etc/man.config中包含MANPATH關鍵詞的行,並把找到的關鍵字加上顏色grep --color=auto MANPATH /etc/man.config#把ls -l的輸出中包含字母file(不區分大小寫)的內容輸出ls -l | grep -i file#在檔案 '/var/log/messages'中尋找關鍵詞"Aug" grep Aug /var/log/messages #在檔案 '/var/log/messages'中尋找以"Aug"開始的行grep ^Aug /var/log/messages #選擇 '/var/log/messages' 檔案中所有包含數位行 grep [0-9] /var/log/messages #在目錄 '/var/log' 及隨後的目錄中搜尋字串"Aug" (遞迴尋找)grep Aug -R /var/log/* #在目前的目錄搜尋帶'energywise'行的檔案grep 'energywise' * #在目前的目錄及其子目錄下搜尋'energywise'行的檔案grep -r 'energywise' * #尋找指定進程ps -ef|grep svn#從檔案中讀取關鍵詞進行搜尋,輸出test.txt檔案中含有從test2.txt檔案中讀取出的關鍵詞的內容行cat test.txt | grep -f test2.txt
grep與正規運算式:
字元類的搜尋:如果我想要搜尋 test 或 taste 這兩個單字時,可以發現到,其實她們有共通的 ‘t?st' 存在~這個時候,我可以這樣來搜尋:
grep -n 't[ae]st' regular_express.txt
其實 [] 裡面不論有幾個位元組,他都謹代表某『一個』位元組, 所以,上面的例子說明了,我需要的字串是『tast』或『test』兩個字串而已!
字元類的反向選擇 [^] :如果想要搜尋到有 oo 的行,但不想要 oo 前面有 g,如下
grep -n '[^g]oo' regular_express.txt
字元類的連續:再來,假設我 oo 前面不想要有小寫位元組,
grep -n '[^a-z]oo' regular_express.txt
當我們在一組集合位元組中,如果該位元組組是連續的,例如大寫英文/小寫英文/數字等等, 就可以使用[a-z],[A-Z],[0-9]等方式來書寫,那麼如果我們的要求字串是數字與英文呢? 呵呵!就將他全部寫在一起,變成:[a-zA-Z0-9]。
我們要取得有數位那一行,就這樣:
grep -n '[0-9]' regular_express.txt
行首與行尾位元組 ^ $
行首字元:如果我想要讓 the 只在行首列出呢? 這個時候就得要使用定位位元組了!我們可以這樣做:
grep -n '^the' regular_express.txt
開頭是小寫位元組的那一行就列出呢?可以這樣:
grep -n '^[a-z]' regular_express.txt
我不想要開頭是英文字母,則可以是這樣:
grep -n '^[^a-zA-Z]' regular_express.txt
^ 符號,在字元類符號(括弧[])之內與之外是不同的! 在 [] 內代表『反向選擇』,在 [] 之外則代表定位在行首的意義!
行尾結束為小數點 (.) 的那一行:
grep -n '\.$' regular_express.txt
特別注意到,因為小數點具有其他意義(底下會介紹),所以必須要使用逸出字元()來加以解除其特殊意義!
#找出空白行grep -n '^$' regular_express.txt
任意一個位元組 . 與重複位元組 *
. (小數點):代表『一定有一個任意位元組』的意思;
* (星號):代表『重複前一個字元, 0 到無窮多次』的意思,為組合形態
#需要找出 g??d 的字串,亦即共有四個位元組, 起頭是 g 而結束是 d ,我可以這樣做:grep -n 'g..d' regular_express.txt#尋找至少兩個 o 以上的字串,『o*』代表的是:『擁有空位元組或一個 o 以上的位元組』grep -n 'ooo*' regular_express.txt#想要字串開頭與結尾都是 g,但是兩個 g 之間僅能存在至少一個 o ,亦即是 gog, goog, gooog.... 等等grep -n 'goo*g' regular_express.txt#找出 g 開頭與 g 結尾的行,當中的字元可有可無grep -n 'g.*g' regular_express.txt#找到兩個 o 的字串,可以是:grep -n 'o\{2\}' regular_express.txt#找出 g 後面接 2 到 5 個 o ,然後再接一個 g 的字串,他會是這樣:grep -n 'go\{2,5\}g' regular_express.txt#2 個 o 以上的 goooo....g 呢?除了可以是 goo*g ,也可以grep -n 'go\{2,\}g' regular_express.txt#從多個檔案中尋找關鍵詞grep 'linux' test.txt test2.txt
總結
以上就是關於Linux中grep命令的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流。