grep文本查找和正则表达式

一、grep

grep: Global search REgular expression and Print outthe line)全局查找正则表达式并且打印结果行。不会对输入的文本进行修改。

Unix的grep家族包括grep、egrep和fgrep,egrep是grep的扩展,支持更多的正则元字符; fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。

用法:grep [OPTIONS] PATTERN [FILE]

          grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

常用options:

      –color=auto:对匹配到的行高亮显示。

             在centos6系列中可以以别名的形式将其写入~/,bashrc,以简化命令;centos7默认写入。

      -i(ignorecase):忽略字符的大小写

-o:仅显示匹配到的字符串本身

-v:显示不能被模式匹配到的行

-n:显示满足条件的行的行号

-c:统计满足条件的行数

-e:或者    grep -e root -e bash /etc/passwd

-w: 匹配的模式被当作整个单词

-E:使用扩展到正则表达式元字符;等同于egrep

-F:支持fgrep

-q(–quiet):静默模式,不输出任何信息

-A #:after,显示匹配到的行及其后#行;默认显示后两行

-B #:before,显示匹配到的行及其前#行;默认显示前两行

-C #:context,显示匹配到的行及其前后各#行;默认显示前后两行     

 

egrep:支持扩展的正则表达式,实现类似grep文本过滤功能。等同于grep –E

fgrep:不支持正则表达式,当无需使用到元字符去编写模式时,使用fgrep性能更好。

 

正则表达式(REGEXP):由一类特殊字符及文本字符所编写的模式,用于在查找的过程中匹配指定的字符,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。

       分两类:

           基本正则表达式: BRE

           扩展正则表达式: ERE

二、基本正则表达式:

1 字符匹配:

. : 匹配任意单个字符;

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

[^] :匹配指定范围外的任意单个字符

[:digit:]:数字

[:lower:] :小写字母

[:upper:] :大写字母

[:alpha:] :所有字母(包含大小写)

[:alnum:] :包含所有字母和数字

[:punct:] :特殊符号

[:space:] :空格

       2 次数匹配:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

             * :匹配前面的字符任意次(0、1或多次)

.* :任意长度的任意字符

\?:匹配其前面的字符0或1次,即其前面的字符是可有可无的

\+:匹配其前面的字符至少1次,即其前面的字符要出现至少1次     

\{n\}:匹配前面的字符n次

\{m,n\}:匹配前面的字符至少m次,至多n次

\{,n\}:匹配前面的字符至多n次

\{n,\}:匹配前面的字符至少n次

       3 位置锚定:

       3.1、行锚定

              ^:行首锚定,用于模式的最左侧

  $:行尾锚定,用于模式的最右侧

      ^PATTERN$: 用于模式匹配整行

^$: 空行

^[[:space:]]*$ :空白行

       3.2、字符锚定

     \< 或 \b:词首锚定,用于单词模式的左侧

     \> 或 \b:词尾锚定;用于单词模式的右侧

     \<PATTERN\>:匹配整个单词

       4分组:

       分组: \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如: \(root\)\+

 引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …

 后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

\1 :模式从左侧起,第一个坐括号以及与之匹配的右括号之间的模式所匹配的字符

\2 :模式从左侧起,第二个坐括号以及与之匹配的右括号之间的模式所匹配的字符

\3 :模式从左侧起,第三个坐括号以及与之匹配的右括号之间的模式所匹配的字符

……n:模式从左侧起,第n个坐括号以及与之匹配的右括号之间的模式所匹配的字符

实例: \(string1\+\(string2\)*\)

\1: string1\+\(string2\)*

\2: string2

例1:显示/proc/meminfo文件中以大小s开头的行; (要求:使用两种方式)

blob.png

例2:添加用户bash、 testbash、 basher以及nologin(其shell为/sbin/nologin),
而后找出/etc/passwd文件中用户名同shell名的行

blob.png

例3:显示/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行

blob.png

三、扩展正则表达式

       1、字符匹配:

. :任意单个字符

[] :指定范围的字符

[^] :不在指定范围的字符

       2、次数匹配:注意格式同基本正则表达式的区别

            *:匹配前面字符任意次

? : 0或1次

+: 1次或多次

{m}:匹配m次

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

       3、位置锚定

       3.1、行锚定

            ^ :行首

$ :行尾

       3.2、字符锚定

\<, \b :词首

\>, \b :词尾

       4、分组:注意同基本正则表达式格式上的区别

              ()

后向引用: \1, \2

例: \(xy\)*ab

       5、或

             a|b

 C|cat: C或cat

 (C|c)at:Cat或cat

例1:找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

blob.png

例2:统计以root身份登录的每个远程主机IP地址的登录次数

blob.png

还有另一种写法,要简单些。不过上一种写法能精确匹配ip地址,也应熟练掌握

blob.png

原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/29889

(0)
M20-1钟明波M20-1钟明波
上一篇 2016-08-07 22:07
下一篇 2016-08-07 22:07

相关推荐

  • N22-第二周作业

    1、文件管理类命令有:cp,mv,rm    cp:复制命令      用法:cp [OPTION]… SOURCE… DEST        如果DEST不存在,则先创建此文件并复制源…

    Linux干货 2016-08-29
  • 马哥教育网络班21期第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;   (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@localhost ~]#…

    Linux干货 2016-10-09
  • yum用法第二篇-自定义创建yum仓库

    一、前言      上次写了yum命令的介绍及常见使用说明,这次打算继续整理下如何自定义创建yum仓库,这在企业中也是非常常见的设置方式,有些公司为了服务器安全是不允许连接外网的,自定义创建yum仓库正好可以实现局域网单独安装管理程序包这种需求。 二、用法说明      1.使用…

    Linux干货 2015-09-22
  • mysql备份之mysqldump

    mysql备份之mysqldump 注意:备份文件和二进制日志文件不能与mysql放在同一磁盘下 节点1 1、节点1上修改mysql配置文件,开起二进制日志保存 这里我将二进制日志放在/data/mysql/目录下,/data/是我创建的另外一个lvm磁盘,本来想直接放在/data/下,发现无法启动mysql,所以建议还是放在/data/mysql中 [ro…

    Linux干货 2016-07-19
  • git

    1.1 Git的安装 1.1.1 版本 # cat /etc/redhat-release CentOS release 6.8 (Final) # uname -r 2.6.32-642.4.2.el6.x86_64 # uname -m x86_64 1.1.2 安装 可以直接通过源码安装。先从Git官网下载源码,然后解压,…

    Linux干货 2016-10-31
  • 文本查看工具、grep及正则表达式

    cat [OPTION]… [FILE]…顺序查看文件-E: 显示行结束符$-n: 对显示出的每一行进行编号(包括空白行)-A:显示所有控制符-T:显示制表符^I(即tab键)-b:只对非空白行进行编号-s:压缩连续的空行成一行 tac 逆序查看文件(第一行变为最后一行) rev 行内逆序查看文件(第一个字符变为最后一个字符) mor…

    Linux干货 2016-08-11