深入理解Linux中的grep命令_linux shell

來源:互聯網
上載者:User

介紹

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命令的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.