1. 程式人生 > >基礎正則和擴展正則的作用

基礎正則和擴展正則的作用

res .... 原因 extend gre 反向引用 次數 () 表達式

*基礎正則表達式:basic regular expression BRE
包括:^ $ . [] [^]
和擴展正則不同的是grep和sed不需要加參數也可以使用

  • ^
    ^d 以d開頭的行,例如:ls l|grep "^d" 給三劍客使用
    只查看以d開頭的行,正則表達式的意思為,以.....開頭,^d就是以d開頭
    [root@yxd data]# grep ‘^m‘ oldboy.txt 以m開頭的行
    my qq is 49000448
  • $
    以什麽什麽結尾的行,例如
    grep "m$" yxd.txt 就是以m結尾的行
    [root@yxd data]# grep ‘m$‘ oldboy.txt 如果m後邊有空格就是空格結尾,查找不到
  • ^$
    表示空行,什麽符號都沒有,例如
    grep -n "^$" yxd.txt 因為空格不好顯示,加行號可以看出來一般用-v排除
  • .
    代表任意一個字符,文本,符號。不匹配空格,
    grep ‘.‘ yxd.txt一個字符一個字符查找,可配合grep -o 查看匹配過程
    也可以在字符中代替任意一個字符,模糊查找。
    例如:grep "ol.y" oldy.txt
    I am oldboy teacher!
    my god ,i am not olbey
    或者查看全部內容grep "." oldboy.txt 表示查找全部字符,不包括空行
    查找以點結尾的內容grep ".$" oldboy用\還原屬性
  • *
    前一個文本或字符連續出現0次或0次以上.
    例如 grep ‘0‘ yxd.txt 會把所有文件顯示,代表0出現0次或者0次以上,要找0所在的行命令為
    grep ‘0 ‘ yxd.txt 0後加空格
    grep -o ‘bl ‘ oldboy.txt查找bl 前一個字符顯示零次,所以星號前相當於出現0次,代表出現0次就是沒有
    [root@yxd data]# grep -o ‘bl ‘ oldboy.txt
    bl
    bl
    bl
    grep -o ‘bl‘ oldboy.txt
    b
    b
    bl
    b
    bl
    bl
    grep "god" a.log 代表o出現0次或者多次
    good
    gd
    god
    goood 查找go開頭的o出現0次或者多次,"god"=gd的原因為"go{0}d"代表o出現0次,什麽也沒有,所以有gd
  • .
    重復前邊的任意一個符號,也就是所有文本字符,包括空行
    以任意符號開頭一直到字母o
    grep ‘^.o‘ yxd.txt
    [root@yxd data]# grep ‘^.o‘ oldboy.txt
    I am oldboy teacher!
    一直到一行最後一個o才結束,貪婪性.所有符號,任何符號,連續出現的字符,有多少匹配多少
    找出以m開頭,以m結尾的行
    grep ‘^m.m$‘ oldboy.txt
  • \
    轉義字符,符號,讓有特殊意義的符號回歸原型,例如:.就表示點

    例如:找出以點結尾的行
    grep ‘.$‘ oldboy.txt
    19.3.7.2 \n
    表示回車
    19.3.8 [ ]

[]在雙引號中,如果[]中是特殊字符會有特殊含義,單引號看做普通單位.雙引號中的[]裏是正則也不會特殊處理正則表達式認為[]裏的內容都是相同的[@#$]這裏認為@#$為相同符號,加上+合成一個整體例如,不加+號視為[]中只匹配一個字符
br/>正則表達式認為[]裏的內容都是相同的[@#$]這裏認為@#$為相同符號,加上+合成一個整體例如,不加+號視為[]中只匹配一個字符
br/>#@$#
@@@##$$@@ 1沒有中斷再到2中斷
匹配所有一個字符 grep [abc] yxd.txt 表示查找a或者b或者c [a-z]表示a到z 全部小寫字母等[a-Z]大小寫
[a-zA-Z0-9],單引號中的[]中的內容沒有特殊含義,是一個字符
[root@yxd data]# egrep ‘[0-9]{3,}‘ oldboy.txt -o
49000448
4900000448
19.3.8.1 [^]
表示排除顯示,例如:grep ‘[^mno]‘ oldboy.txt,查找除了m或n或o的內容,根據字母的,放前邊是取反,放後邊查找^例如[mn^]
19.3.8.2 ^[]
以括號裏的開頭,例如:grep ^[mno] yxd.txt 以m或以n或以o開頭的行
19.3.8.3 找以小寫字母開頭,.!結尾
[root@yxd data]# grep ‘^[a-z].[.!]$‘ oldboy.txt
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
19.3.8.4 不以mn開頭
grep ‘^[^mn]‘ oldboy.txxt
grep -v ‘^[mn]‘ oldboy.txt
sed -n ‘/^[^mn]/p‘ oldboy.txt
awk ‘/^[^mn]/‘ oldboy.txt
19.4 擴展正則表達式:
需要用egrep或者grep -E
extended regular expression ERE
包括: | + () {} ?

  • +
    前一個字符連續出現1次或一次以上,排查時只顯示字母所在的一行。
    egrep ‘a+‘ yxd.txt和不同的是 只顯示帶有a的一行
    例如:grep -E ‘[a-z]+‘ oldboy.txt或者grep ‘[a-z]+‘ oldboy.txt取出文件中連續小寫的行,加了+就不是一個字符一個字符找,一個單詞一個單詞找。
    可以把連續出現的東西連成一個整體
    ifconfig eth0|awk ‘NR==2‘|awk -F ‘[ :]+‘ ‘{print $4}‘ +號代表文件多個空格化為連續的一個空格
    [root@yxd data]# grep -E ‘[a-z]+‘ oldboy.txt -o
    am
    oldboy
    teacher
    teach 不加+就是一個字符一個字符匹配,加了是匹配到結束為止,也就是空格或者符號中斷,接著匹配
    一般和[]配合使用,取出連續的字符
  • |
    或者的意思egrep "100|200" /etc/services grep需要加e進化才能用
  • ()
    表示一個整體。egrep ‘oldb(o|e)y‘ oldboy 表示的為oldboy|oldbey
    常用於反向引用/後向引用(sed常用)
    例如:echo 123456|sed -r ‘s#(.)#<\1>#g‘
    <123456> 引用括號裏的內容,防在後邊使用\1表示括起來的第一個內容
    echo 123456|sed -r ‘s#(34)#<\1>#g‘ 只引用34
    echo 123456|sed -r ‘s#(.).(..).(.)#<\2>#g‘
    這裏的\2表示括起來的第幾個,引用第幾個括號裏的內容。
    可以\2\3表示使用引用的第2塊和第3塊
    反向引用增加內容
    也可以增加內容
    [root@yxd ~]# find /root/ -type f -name ‘yxd.txt‘|xargs sed -ri ‘s#(.)#www.\1.org#g‘
    [root@yxd ~]# cat yxd.txt
    www.yxd.org
    www.yxd.org
    www.yx.org
    www.yxd.org
  • ?
    表示重復前一個字符0次或者1次
    例如egrep "go?d" a.log
    gd
    god
    用+號就是egrep "go+d" a.log
    good
    god
    goood
    用就是 grep "god" a.log
    good
    gd
    god
    goood
    19.4.5 {}
    自定義次數或前一個字符重復幾次到幾次,例如‘wq{1,3}‘代表q這個字符重復1次至3次,包括2次
    前一個字符連續出現最少幾次,最多幾次,
    例如:0{n,m} 前一個字符至少連續出現n次,最多連續出現了m次
    0{n} 前一個字符連續出現n次
    0{n,} 前一個字符至少連續出現n次
    0{,m} 前一個字符最多連續出現了m次

  • 前一個字符重復幾次

前一個字符重復0次或0次以上
+
前一個字符重復1次或1次以上,可以把連續出現的東西連成一個整體

前一個字符重復0次或1次
{}
自定義幾次或前一個字符重復幾次到幾次,例如:‘weeq{1,3}‘q重復1次至3次
*

基礎正則和擴展正則的作用