天天看点

基础正则和扩展正则的作用

*基础正则表达式: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

  • 前一个字符重复几次

继续阅读