浅谈我对grep跟egrep的简单认识

  ㈠首先我们要明白grep和egrep的干什么用的

  grep:global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它只能用基本的正则表达式来搜索文本,并把匹配的行打印出来。

  egrep:命令等同于grep -E,利用此命令可以使用扩展的正则表达式对文本进行搜索,并把符合用户需求的字符串打印出来。

  为了使大家看的明白我就使用大白话:

  grep命令的使用格式:grep+选项+'某种模式'+你索要查询的内容路径:(选项可以忽略)

  ①例:我要查找/etc/rc.d/rc.sysinit 有boot字符的行 :grep –colour=auto 'boot' /etc/rc.d/rc.sysinit

  为了我们便于查看,所以我 使用了–colour=auto的选项,就是把结果以不同颜色显示出来。大家可以试着去查看下效果。

  那么grep常用选项有那些?下面我们介绍下grep的常用选项

  ⑴  -v : 取反,就是显示出与查找条件相反的结果

  ②例我要查找/etc/passwd中以/bin/bash结尾的行:

  [root@localhost ~]# cat /etc/passwd | grep '/bin/bash$'

  root:x:0:0:root:/root:/bin/bash

  那么不以/bin/bash结尾的呢?

  [root@localhost ~]# cat /etc/passwd | grep -v '/bin/bash$' | head -1

  bin:x:1:1:bin:/bin:/sbin/nologin

  ⑵-i:忽略大小写

  ③例:我们拿有-i 跟没-i做比较 例如查找/etc/rc.d/rc.sysinit中有s的字符 因为我黏贴没有颜色显示效果,所以我只把命令给大家敲出来

  [root@localhost ~]# grep –colour=auto 's' /etc/rc.d/rc.sysinit

  [root@localhost ~]# grep -i –colour=auto 's' /etc/rc.d/rc.sysinit

  ⑶–colour颜色显示后面常跟auto

  ⑷-A n :显示匹配到所在行的后面n行

  ④例      [root@localhost ~]# grep -A1 '/bin/bash$' /etc/passwd

  root:x:0:0:root:/root:/bin/bash

  bin:x:1:1:bin:/bin:/sbin/nologin

  ⑸-Bn:显示匹配到所在行前面的n行

  ⑹-Cn:显示匹配到所在行的前后各n行

  ⑺-n  :给显示匹配的行以行号

  ⑤例      [root@localhost ~]# grep -n -A1 '/bin/bash$' /etc/passwd

  1:root:x:0:0:root:/root:/bin/bash

  2-bin:x:1:1:bin:/bin:/sbin/nologin

  ⑻-c:统计匹配到字符的次数

  ⑥例     [root@localhost ~]# grep -c 's' /etc/rc.d/rc.sysinit

  当然还有好多选项,我们就介绍几个大家可能常用到的。大家也可能注意到了我命令里面字符串都用了单引号所以需要大家注意在正则表达式里如果有字符串则需要用单或双引号把它给引起来。如果是变量例如$hh等那么这个变量还有正则对它所做的一些正则表达式的元字符都要用双引号囊括起来。

  ㈡那么我们这里还需要知道一个知识点,什么是正则表达式?

  正则表达式的基本定义: 正则表达是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式通常被用来检索、替换那些符合某个模式的文本。

  那么常用的正则表达式的元字符都有那些?下面我们给大家一一介绍:

  按功能分类:

  一:做字符匹配的元字符:

  1:.(就是一个点)匹配任意字符

  2:[ ]匹配指定范围里面的任意单个字符

  3:[^ ]匹配指定范围外的任意单个字符(就是除了中括号里面的不能用,别的你随便)

  4:[[:space:]] :空白字符

  5:[[:lower:]]:匹配所有的小写字母

  6:[[:upper:]]:匹配所有的大写字母

  7:[[:alpha:]]:匹配所有的大小写字母

  8:[[:digit:]]:匹配所有的数字

  9:[[:alnum:]]:匹配所有的数字和大小写字母

  10:[[:punct:]]:所有标点符号

  二:做次数匹配:

  1:*:任意次

  2:.*(点*)任意字符任意次

  3:?:前面的字符0次或1次

  4:{m}:匹配m次

  5:{m,n}:至少m至多n

  6:{m,} :至少m次

  7:{0,n}:至多n次

  三:做位置锚定:

  1:^ :锚定行首

  2:$ :锚定行尾

  3:^$ :空白行

  四:单词的锚定:

  1:<:锚定词首(或者也可以用 )例如:以#号开头的行:^# 或 #

  2:>:锚定词尾(也可以用#)

  但是两者是有写区别的例如

  ⑦例:[root@localhost ~]# grep ' #' /etc/rc.d/rc.sysinit

  #remount /dev/shm to set attributes from fstab #669700

  #remount /proc to set attributes from fstab #984003

  [root@localhost ~]# grep '^#' /etc/rc.d/rc.sysinit

  #!/bin/bash

  #

  #remount /dev/shm to set attributes from fstab #669700

  #remount /proc to set attributes from fstab #9

  注意:字符跟之间是有空格的只会匹配出#头后面紧跟字符的行

  五:分组:

  1:():分组

  ⑧例:查找/etc/rc.d/rc/sysinit中sys一组的字符行

  [root@localhost ~]# grep –colour=auto '(sys)' /etc/rc.d/rc.sysinit

  2:1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容

  (a.b)xy1  就是匹配一个a b 之间有任意一个单词的 xy后面跟a.b一样的字符

  例如acbxy  那匹配结果的单词就是acbxyacb  1就是把括号内的东西在cp1份放到xy后面

  以上就是正则表达式的元字符,如有不合理的地方请大家雅正。

  介绍完了grep我们简单说说egrep,egrep其实就是扩展正则表达式grep -E就相当于egrep

  扩展表达式其实就是比正则表达式稍微有一点点的改变,下面我只列出与grep不一样的地方

  字符匹配:

  ?:匹配前面的字符0或1次

  +:匹配前面的字符至少1次

  {m}:匹配前面的字符m次

  {m,n}:匹配至少m次,至多n次

  {m,}:至少m次

  {0,n}:至多n次

  分组:

  ():分组

  | :或者 ,a|b a或者b (a|b)

  以上就是我对grep跟egrep的简单认识,与大家分享下,欢迎大家雅正及反馈。谢谢!

 

发表评论

邮箱地址不会被公开。 必填项已用*标注