Linux之grep
注意:以中括號(hào)的形式,表示一個(gè)整體
grep用法講解
grep (global search regular expression and print the line),以行為單位進(jìn)行信息的提取和分析
[root@localhost ~]grep [-acinv] [--color=auto] '查找的字符串' filename參數(shù)解析:
-a 將binary文件以text文件的方式查找數(shù)據(jù)
-c 計(jì)算找到? ?'查找字符串' 次數(shù)
-i 忽略大小寫(xiě),所有的大小寫(xiě)視為一樣
-n輸出行號(hào)
-v 反向選擇,即顯示出沒(méi)有? '查找字符串'? 內(nèi)容的那一行
--color=auto 將關(guān)鍵部分加上顏色顯示,由于高亮提取的數(shù)據(jù)可以使人一目了然,因此為了永久有效,可以在 ~./bashrc? 內(nèi)容里修改,加上alias grep='grep --color=auto'
再以source命令使其立即生效
此外關(guān)于grep的還有的其他用法
[root @localhost ~]# grep [-A] [-B] [--color=auto] '查找字符串' filename參數(shù)解析:
-A 后面可以加數(shù)字,為after之意,-A5表示第5行到最后一行都會(huì)表示出來(lái)
-B 后面可以加數(shù)字,為befer之意,-B5,表示首行到第5行都會(huì)表示出來(lái)
表示關(guān)鍵字 'root'所在行的前2行與'root'所在行的后3行都會(huì)被顯示出來(lái)
關(guān)于正則表達(dá)式的練習(xí):
1、利用中括號(hào)? [ ]? 查找字符集合
如果查找的 test 和 tast ,不難發(fā)現(xiàn)這個(gè)兩個(gè)字符串的的區(qū)別是e和a,因此
[root @localhost tmp] # grep -n 't[ae]st' re.txt關(guān)于 [] 里面無(wú)論有幾個(gè)字符,都表示只取其中的一個(gè)字符
如果想查找 'oo' 的字符時(shí),可以
[root @localhost tmp]# grep -n 'oo' re.txt此時(shí)會(huì)找出所有含有oo的字符串的行并予以顯示
如果不想要goo形式開(kāi)頭的字符串的行,可以
[root @localhost tmp]#grep -n '[^g]oo' re.txt注意這里的不以 g 開(kāi)頭的字符串,是 [^g]的形式
這里10和11行中之所以還有g(shù)oo 的形式,因?yàn)?oo 前還有o,即至少3個(gè)o
現(xiàn)在找出oo前無(wú)小寫(xiě)字母,使用反向選擇字符 ^
[rrot @localhost tmp]# grep -n '[^a-z]oo' re.tx或者:獲取oo前無(wú)小寫(xiě)字母的形式
[root @localhost tmp] #grep -n '[^[:lower]]'oo' re.txt對(duì)比行首字符 ^:
[root @localhost tmp] # grep -n '^[a-z]' re.txt找出開(kāi)頭是小寫(xiě)字母+oo的形式所以一定注意反向選取 ^ 和 行首字符 ^,這里個(gè)符合一樣的,但是放置的位置不同,決定了其意義不同,在[^]表示反向選擇,^[]表示行首的意思
在一組字符集合中,如果該字符是連續(xù)式,可以使用如[0-9][A-Z][a-z]等方式來(lái)書(shū)寫(xiě)
[root @localhost tmp]# grep -n '[0-9]' re.txt當(dāng)然也可以使用特殊字符表示方法
[root @localhost tmp] # grep -n '[[:digit:]]' re.txt2、行尾字符 $
想要查找以 .為行尾的那一行
[root @localhost tmp] #grep -n '\.$' re.txt注意這里之所以 \. ,是因?yàn)?. 還有其他含義,這里使用轉(zhuǎn)義字符使其成為普通字符
顯示空白行
[root @localhost tmp]# grep '^$' re.txt3、任意一個(gè)字符 . 和重復(fù)字符*
在bash中,知道通配符* 可以用來(lái)表示0個(gè)或任意個(gè)字符,但是正則表達(dá)式不是通配符,兩者之間是不同的,正則表達(dá)式中 “.”表示肯定有一個(gè)任意字符,* 表示重復(fù)前一個(gè)字符 0次或者多次,為組合形態(tài)
[rroot @localhost tmp]# grep -n 'g..d' re.txt表示在字母g和d之前一定有兩個(gè)字符
查找至少含有兩個(gè) o,即 oo的字符串的行,注意 o* 表示具有空字符或者一個(gè)以上的o,因此兩個(gè)oo,則要表示為 ooo*,一定要注意
所以, .* 表示0個(gè)或者任意多個(gè)字符
在 g 和 g 之前的所有字符串所在的行都表示出來(lái)
正確理解 [0-9][0-9]* 與 [0-9] 的含義
4、限定連續(xù)re字符范圍{}
如果想找到2-5的o連續(xù)字符串,此時(shí)需要用到限定范圍的字符{},因?yàn)?“{” 和 “}”的符號(hào)在shell中石油特殊含義的,因此這里需要轉(zhuǎn)義 \ 使其失去特殊意義,這里找到兩個(gè)o
[root @localhost tmp]# grep -n 'o\{2\}' re.txt找到2個(gè)到5個(gè)的o字符
[root @localhost tmp]# grep -n 'o\{2,5\}' re.txt如果是找到2個(gè)以上的o怎么辦呢?
[root @localhost tmp]# grep -n 'o\{2,\}' re.txt如果要去掉空白行和以#開(kāi)頭的注釋行
[root @localhost tmp]#grep -n '^$' re.txt | grep -n '^#'使用grep進(jìn)行兩次查找,如果使用擴(kuò)展性表達(dá)式,則可以進(jìn)行一次性操作就可以,大大簡(jiǎn)化了操作,這里是 egrep
[root @localhost tmp]#egrep -v '^$ | #' re.txt這里介紹幾種常見(jiàn)的擴(kuò)展性正則表達(dá)式的用法
a.? ?+? ? ?重復(fù)一個(gè)或一個(gè)以上的錢(qián)一個(gè)RE的字符,如果查找god,good,goood,發(fā)現(xiàn)o為一個(gè)以上,因此可以使用o+
[root @localhost tmp]#egrep -n 'go+d' re.txtb.? ?? ? ? 零個(gè)或一個(gè)的前一個(gè)RE字符
[root @localhost tmp]# egrep -n 'go?d' re.txt上述兩種用法,不難發(fā)現(xiàn)兩者的和為? 'go*d' 的形式
c.? ? |? ? ? ?或的形式,找出數(shù)個(gè)字符串,查找 god 和 good 兩個(gè)字符串
[root @localhost tmp]#egrep -n 'gd|good' re.txtd.? ?()? ? ? ?找出組字符串,如果想要找出 god 和 glad ,由于差別在 o 和 la,因此結(jié)合 | 的用法
[root @localhost tmp]#egrep -n 'g(o|la)d' re.txte.? ?()+? ? 多個(gè)重復(fù)組的判別,查找AxyxyxyxyxyzC,發(fā)現(xiàn)xy一直在重復(fù),因此
[root @localhost tmp]#egrep -n 'A(xy)+zC' re.txt總結(jié)
以上是生活随笔為你收集整理的Linux之grep的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux之Sed详解
- 下一篇: linux之source