天天看點

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

*基礎正規表達式: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

    grep -o 'bl' oldboy.txt

    b

    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

    一直到一行最後一個o才結束,貪婪性.所有符号,任何符号,連續出現的字元,有多少比對多少

    找出以m開頭,以m結尾的行

    grep '^m.m$' oldboy.txt

  • \

    轉義字元,符号,讓有特殊意義的符号回歸原型,例如:.就表示點

    例如:找出以點結尾的行

    grep '.$' oldboy.txt

    19.3.7.2 \n

    表示回車

    19.3.8 [ ]

  • +

    前一個字元連續出現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.yx.org

  • 前一個字元重複幾次

繼續閱讀