关于grep,egrep正则表达式的常用用法
正則表達(dá)式是一類字符所書寫的模式(pattern)
元字符:不表示字符本身的意義,而用于額外功能性的描述;而如果在這些特定的字符前加/這個(gè)符號(hào)那么這些字符就表示原有的意思。
正則表達(dá)式:基本正則表達(dá)式和擴(kuò)展正則表達(dá)式
grep [opinions] 'pattern' FILENAME
"pattern"和'pattern'單雙引號(hào)的區(qū)別:單雙引號(hào)就是對(duì)變量引用的區(qū)別""能引號(hào)變量直,''不引用
grep默認(rèn)支持基本正則表達(dá)式
首先先講解基本正則表達(dá)式的pattern的一些常用用法
首先定義alias grep="grep --color=auto"
^:錨定行首的符合條件的內(nèi)容,用法格式“^pattern”;
例:
[root@localhost ~]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
$: 錨定行尾的符合條件的內(nèi)容,用法格式“pattern$”;
^$: 空白行
.: 匹配任意單個(gè)字符,就像通配符里面的?用法
*:匹配緊挨在其前面的字符任意次;這個(gè)與通配符里面的*有區(qū)別。通配符的*=正則表達(dá)式的.*
a*b: ab, aab, acb(整個(gè)不匹配,但會(huì)顯示出來(lái)), b
.*: 匹配任意長(zhǎng)度的任意字符
[]:匹配指定范圍內(nèi)的任意單個(gè)字符
[^]:匹配指定范圍外的任意單個(gè)字符,下面還有個(gè)關(guān)于grep的選項(xiàng)-v也是取反。但兩者是有區(qū)別的。
1:[^]后面要接字符 -v可以接空白行(^$),[^]經(jīng)試驗(yàn)不行要出錯(cuò)
2:[^]接單個(gè)字符后,比如有一串字符abcde,[^a]后其仍然要顯示,而-v不顯示。
[a-z], [A-Z], [0-9]
[:lower:] a-z
[:upper:] A-Z
[:digit:]所有數(shù)字
[:alpha:]所有字母
[:alnum:]所有字母和數(shù)字
[:space:]
[:punct:]所有符號(hào)
grep "r[0-9].*h" /etc/passwd
表示顯示以r開(kāi)頭后面緊跟一個(gè)數(shù)字中間任意長(zhǎng)的字符串再以h結(jié)尾,值得一提的是如果一個(gè)字符串像這樣:adr1sdahdfadh它會(huì)顯示:adr1sdahdfadh而非adr1sdahdfadh。這是貪婪模式(盡可能長(zhǎng)地去匹配符合模式的內(nèi)容)
\?: 匹配緊挨在其前面的字符0次或1次;
a\?b(表示b前面有0或1個(gè)a能全部匹配): ab, aab, acb, b
\{m,n\}: 匹配其前面的字符至少m次,至多n次;
\{0,n\}: 至多n次;0-n次;(n要寫個(gè)數(shù)字)
\{m,\}:至少m次
\{m\}: 精確匹配m次;
a\{1,3\}b: b, ab, aab, aaab, aaaaaab, acb
grep "[bB].\{2,5\}[tT]": Boot, B123T, bxy12T
\<: 錨定詞首,用法格式:\<pattern
\b: \bpattern
\>: 錨定詞尾,用法格式:pattern\>
\b: pattern\b
\<pattern\>:錨定單詞
grep "\<root\>" /etc/passwd
\(\): 分組,用法格式: \(pattern\)
\(ab\)\{1,3\}: ab, aab, abb, abab, ababab,
ab任意字符ab:ab.*ab
a.b任意字符a.b: \(a.b\).*\1
grep的選項(xiàng):
--color=auto
export GREP_COLOR='01;36'
-v: 反向選取,只顯示不符合模式的行;
前面已經(jīng)提到過(guò):grep -v "^$" /etc/rc.d/rc.sysinit 不顯示空白行
-o: 只顯示被模式匹配到的字串,而不是整個(gè)行;
-i: 不區(qū)分字符大小寫;
-A #:顯示匹配到的行時(shí),順帶顯示其后面的#個(gè)行;
-A 2
-B #:前面的#行;
-C #:前后的#行;
-E: 使用擴(kuò)展的正則表達(dá)式
grep -E = egrep
擴(kuò)展正則表達(dá)式:
.: 任意單個(gè)字符
[]: 匹配任意范圍內(nèi)單個(gè)字符
a|b: 二選一;
例:egrep "[ab]" = egrep "a|b"
[^]:匹配指定外的任意單個(gè)字符
*:
+: 匹配其前面的字符至少1次;
?: 0次或一次
{m,n}: 至少m次,至多n次;
():分組,支持引用\1, \2;
\<
\>
^
$
grep -E = egrep
grep "(c|C)at" /root/test.txt
cat, Cat
c, Cat
練習(xí):
顯示/etc/rc.d/rc.sysinit中以#開(kāi)頭,且后面跟一個(gè)或多個(gè)空白字符,而后又跟了任意非空白字符的行;
[[:space:]], [^[:space:]]
顯示/proc/meminfo文件中以不區(qū)分大小的s開(kāi)頭的行;
# grep "^[Ss]" /proc/meminfo
顯示/etc/rc.d/rc.sysinit中符合形為“任意單個(gè)字符n任意字符任意單個(gè)字符n”模式的行;即任意單個(gè)字符后面跟了個(gè)n,n后面有任意長(zhǎng)度的任意字符,而后是任意單個(gè)字符后面跟了個(gè)n;
.n.*.n
顯示/etc/rc.d/rc.sysinit中符合形為“任意單個(gè)字符n任意字符任意單個(gè)字符n”模式的行;即任意單個(gè)字符后面跟了個(gè)n,n后面有任意長(zhǎng)度的任意字符,而后是任意單個(gè)字符后面跟了個(gè)n,但后面的n之前的字符要與前面的n之前的字符相同;
\(.n\).*\1
顯示/boot/grub/grub.conf文件中以一個(gè)或多個(gè)空白字符開(kāi)頭的行;
^[[:space:]]\{1,\}
轉(zhuǎn)載于:https://blog.51cto.com/nickzhao/1316455
總結(jié)
以上是生活随笔為你收集整理的关于grep,egrep正则表达式的常用用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hMailServer 邮件系统安装配置
- 下一篇: 【杨中科】问苍天,微软的技术更新真的快吗