grep、egrep、fgrep的用法与特性详解
[轉載自]http://tanxw.blog.51cto.com/4309543/1361993
開篇
? ? ? ?學習Linux也有一段時間了,對Linux多少也算是有點了解了,越是了解也就越對這個系統有興趣,從0基礎開始,已經學習了兩周了吧,說實在的,很多的東西都是邏輯的問題,而學習Linux就是要熟悉命令,命令很多,要記的東西也很多,多得可以你讓頭皮發麻,不過話又說回來了,既然選擇了這門技術,那就義無反顧的去做好做專,好了,總結一下這兩周來感覺學起來比較用力的部分。
?
正文之:grep的詳細介紹
? ? ? ?grep和egrep是現在感覺比較難的一部分,主要是符號多,看得眼花了亂。
? ? ? ?grep(global search regular expression and prind out the line)全稱就叫全面搜索正則表達式 并打印行出來,簡單來說就是文本搜索工具,根據用戶指定的文本搜索模式對目標文本進行搜索,顯示能夠所匹配的行,當然,也可以把grep看也是一個文本過慮器。
? ? ? ?格式:grep [options]... 'PATTERD模式' file....
? ? ? ?模式:就是一個最基本的字符串 ? ?
? ? ? ?如:grep –A 1 '[r][[:punct:]]*[t]' /etc/passwd ?''里的內容就是模式
grep的常用選項:
? ? ? ?-v:反向匹配、顯示不能別模式匹配到的行;
? ? ? ?例:取出/etc/fstab不包含#號的行
? ? ? ?gerp –v "#" /etc/fstab
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | [root@localhost xiao]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Mon Feb 10 10:38:04 2014 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/vg0-root???/?????????????????????? ext4??? defaults??????? 1 1 UUID=99e81364-46cb-4795-974a-6cc0ab91a46f/boot?????????????????? ext4??? defaults??????? 1 2 /dev/mapper/vg0-usr????/usr??????????????????? ext4??? defaults??????? 1 2 /dev/mapper/vg0-var????/var??????????????????? ext4??? defaults??????? 1 2 /dev/mapper/vg0-swap???swap??????????????????? swap??? defaults??????? 0 0 tmpfs??????????????????/dev/shm??????????????? tmpfs?? defaults??????? 0 0 devpts?????????????????/dev/pts??????????????? devpts? gid=5,mode=620? 0 0 sysfs??????????????????/sys??????????????????? sysfs?? defaults??????? 0 0 proc???????????????????/proc?????????????????? proc??? defaults??????? 0 0 [root@localhost xiao]# grep -v "#" /etc/fstab /dev/mapper/vg0-root???/?????????????????????? ext4??? defaults??????? 1 1 UUID=99e81364-46cb-4795-974a-6cc0ab91a46f/boot?????????????????? ext4??? defaults??????? 1 2 /dev/mapper/vg0-usr????/usr??????????????????? ext4??? defaults??????? 1 2 /dev/mapper/vg0-var????/var??????????????????? ext4??? defaults??????? 1 2 /dev/mapper/vg0-swap???swap??????????????????? swap??? defaults??????? 0 0 tmpfs??????????????????/dev/shm??????????????? tmpfs?? defaults??????? 0 0 devpts?????????????????/dev/pts??????????????? devpts? gid=5,mode=620? 0 0 sysfs??????????????????/sys??????????????????? sysfs?? defaults??????? 0 0 proc???????????????????/proc?????????????????? proc??? defaults??????? 0 0 |
?
? ? ? ?-o:僅匹配被模式匹配到的字串,而非整行,就是僅顯示匹配到的內容
? ? ? ?例:只顯示/etc/fstab為mapper的字串
? ? ? ?grep -o "mapper" /etc/fstab
| 1 2 3 4 5 | [root@localhost xiao]# grep --color=auto -o "mapper" /etc/fstab mapper mapper mapper mapper |
?
? ? ? ?-i:不區分大小寫對文本進行匹配搜索
? ? ? ?
? ? ? ?-E:支持擴展正則表達式
? ? ? ?-A #:顯示模式匹配到的行以及后面的N行 #代表你要顯示多少行
? ? ? ?例:顯示/etc/passwd中shutdown用戶后面3行
? ? ? ?
? ? ? ?-B #:顯示模式匹配到的行以及前面的N行
? ? ? ?例:顯示/etc/passwd中shutdown用戶上面2行
? ? ? ?
? ? ? ?-C #:顯示模式匹配到的行以及上下的N行
? ? ? ?例:顯示/etc/passwd中shutdown用戶上下面2行
? ? ? ?
?
? ?其實,要用好grep的強大搜索功能,那就不得不說說正則表達式了:
? ?正則表達式就是一類字符所書寫出來的模式(pattern)、正則表達式基本上都是由元字符組成;
? ?那什么是元字符呢:元字符不表示字符本身的意義,而是用于額外功能性的描述。
? ?基本正則表達式的元字符:學習正則表達式主要是來學習其元字符的用法后慢慢組合這些元字符來表達到正則表達式的使用,grep在默認情況下只支持基本正則表達式。
注意:
? ?模式當中一但包含元字符一定要用''或""號引起來,單雙引號都可以、只不過如果其中出現了變量、并且我們希望做變量替換的話那就要使用""雙引號了、否則可以不加區分的使用。
? ?那就來說說元字符的通配:
? ? ? ?.(點號):匹配任意的單個字符的
? ? ? ?例:grep "r..t" /etc/passwd
? ? ? ?rt加上兩點被匹配到的只有4個字符,點號表示的是單個字符
? ? ? ?
? ? ? []:指定范圍內的任意的單個字符
? ? ? ? ? ?[0-9] [[:digit:]]:表示匹配0到9的任意單個數字、兩種表示方法都可以
? ? ? ? ? ?[a-z] [[:lower:]]:表示匹配小寫的a到z的任意單個字母、即a-z
? ? ? ? ? ?[A-Z] [[:upper:]]:表示匹配大寫的A到Z的任意單個字母、即A-Z
? ? ? ? ? ?[[:alpha:]]:表示英文大小寫字母、即:a-z,A-Z
? ? ? ? ? ?[[:space:]]:表示包含的空白字符、即空格鍵,tab鍵
? ? ? ? ? ?[[:alnum:]]:表示包含數字大小寫字母、即0-9,A-Z,a-z
? ? ? ? ? ?[[:punct:]]:表示包含標點符號、即:" ' ? ! ; : # $...
?
? ? ? ?例:顯示/etc/fstab下含有數字的行
? ? ? ?grep --color [0-9] /etc/fstab
? ? ? ?
?
? ? ? ?例:顯示/etc/fstab中包含大寫字母的行
? ? ? ?grep --color "[[:upper:]]" /etc/fstab ? ? ? ?
? ? ? ?
? ? [^]:表示指定范圍外的任意單個字符、就是使用了脫字符取反
? ? ? ? 例:顯示/etc/fstab中數字以外的內容
? ? ? ? grep --color [^[:digit:]] /etc/fstab
? ? ? ?
? ?字符的次數匹配:用來匹配其前面的字符的次數的
? ? ? ? ? ?*:(星號)匹配其緊挨著星號的字符出現任意次
? ? ? ? ? ? ? ?例:x*y就是x可以出現意次、包括0次
? ? ? ? ? ?.*:(點星)匹配任意長度的任意字符
? ? ? ? ? ?\?:表示其前面的字符出現0次或者1次、\是轉譯字符
? ? ? ? ? ? ? ?例:x\?y:可以匹配到的只有xy和y
? ? ? ? ? ?\{m\}:匹配m次 ?如:x\{4\}y表示y前面的x出現4前就可以被匹配到
? ? ? ? ? ?\{m,n\}:至少m次,至多n次
? ? ? ? ? ?\{m,\}:至少m次
? ? ? ? ? ?\{0,n\}:至多匹配n次、0不可以省略
?
? ? ? ? ? ? 例:找出/etc/fstab文件中一位數或兩位數
? ? ? ? ? ?grep --color '\<[0-9]\{1,2\}\>' /etc/fstab
? ? ? ? ? ?\{1,2\}:表示0-9的數字出現的至有1位、至多有2位、
? ? ? ? ? ?
? ?位置錨定符:用于指定字符出現的位置
? ? ? ? ? ?^:用于錨定行首,如(^Char) 匹配到的字符必須出現有行首的
? ? ? ? ? ?$:用于錨定行尾,如(Char$) grep 'bash$' /etc/passwd
? ? ? ? ? ?^$:空白行、查找一個文件中所出現的空白行 ?^hello$表示只有hello的行
?
? ? ? ? ? ?例:顯示/etc/fstab中以#號開頭的行
? ? ? ? ? ?grep --color "^#" /etc/fstab
? ? ? ? ? ?
? ?單詞的錨定:
? ? ? ? ? ?\<char:錨定詞首,\<[r]表示一行以r開頭的單詞都可以匹配、也可以使用\b表示
? ? ? ? ? ?char\>:錨定詞尾,一行以r開頭的單詞都可以匹配、\b
? ? ? ? ? ?\<hello\>:表示精確錨定hello這個單詞
? ? ? ? ? ?\<h…o\>:表示以h開頭、以o結尾、中間跟了任意三個字符的單詞
?
? ? ? ? ? ?例:顯示/etc/passwd中以stu開頭的單詞
? ? ? ? ? ?grep --color "\<stu" /etc/passwd ? ? 只要是以stu開頭的單詞都會被匹配到
? ? ? ? ? ?
?
? ?分組元字符:
? ? ? ? ? ?\(\):分組 ?\是轉譯字符 ?
? ? ? ? ? ?例:\(ab\)*xy
? ? ? ? ? ?ab括起來表示一個組了,表示xy前面的ab組現出任意次,可以被匹配到的
? ? ? ? ? ?abxy,ababxy,ababababxy,abababababababxy,......
? ?引用: 對分組的字符塊進行引用
? ? ? ? ? ?\1:后向引用,引用前面的第一個左括號以及與之對應的右括號中模式所匹配到的內容
? ? ? ? ? ?\2:后向引用,引用前面的第二個左括號以及與之對應的右括號中模式所匹配到的內容
? ? ? ? ? ?.......
? ? ? ? ? ?例:\(a.b\)xy\1 可以匹配到的有(abxyab不可以匹配到)
? ? ? ? ? ?akbxyakb,a3bxya3b,aYbxyaYb
? ? ? ? ? ?例:我們來看這個例子、找出以下love與之對應的lover、like與之對應的liker
? ? ? ? ? ?He like his lover.
? ? ? ? ? ?She love her liker.
? ? ? ? ? ?He love his lover.
? ? ? ? ? ?She like her liker.
? ? ? ? ?
?
正文之:egrep的詳細介紹
? ? ? ?egrep:使用擴展正則表達式來構建模式,相當于grep –E、通常寫成egrep、用法基本上跟grep的相同、只是有些不需要\轉譯
? ?元字符:字符匹配
? ? ? ? ? .:匹配任意單個字符
? ? ? ? ? []:指定范圍內的任意單個字符
? ?次數匹配:
? ? ? ? ? *:匹配其緊挨著星號的字符出現任意次
? ? ? ? ? ?:表示其前面的字符出現0次或者1次
? ? ? ? ? +:匹配其前面的字符至少1次
? ? ? ? ? {m}:匹配其前面的字符m次
? ? ? ? ? {m,n}:至少m次,至多n次
? ? ? ? ? {m,}:至少m次
? ? ? ? ? {0,n}:至多n次
?
? ? ? ? 例:找出/etc/fstab文件中一位數或兩位數
? ? ? ?egrep --color '\<[0-9]{1,2}\>' /etc/fstab ?{}不需要轉譯
? ? ? ?
? ?做位置錨定:
? ? ? ? ^:行首錨定
? ? ? ? $:行尾錨定
? ? ? ? \<:詞首
? ? ? ? \>:詞尾
? ?分組:
? ? ? ?():分組
? ? ? ?|:或者 ?ab|xy意思為ab或者xy ?a(b|x)y意思為aby或者axy
正文之:fgrep的詳細介紹
? ?fgrep:fash,它不解析正則表達式、想找什么就跟什么就可以了;
? ? ? ?例:
? ? ? ?fgrep "/bin/bash" /etc/passwd
?
? ? ? ?例:顯示/etc/fstab中含有defaults的行
? ? ? ?fgrep --color "defaults" /etc/fstab
? ? ? ?
?
結束
? ? ? ?常用的大概的內容應該就這些吧,這些都是學習當中的基本用法和我個人的筆記,總結并記下,以便以后查找,同時,雖然是剛學習的,也希望我個人的總結可以幫到更多的人,哦了,不多說了,就總結到這里了,歡迎大神來指點。
總結
以上是生活随笔為你收集整理的grep、egrep、fgrep的用法与特性详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正则表达式grep, egrep, fg
- 下一篇: [综合面试] 跨专业大牛的IT求职面试经