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
下一篇 2016-08-07

相关推荐

  • Linux文件查找的使用方法

    文件查找的方法 locate命令       非实时查找(数据库查找): locate查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db    依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);管理员手动更新数据库(updated…

    Linux干货 2016-08-15
  • screen命令

    安装SCREEN[root@centos6 ~]# dfFilesystem     1K-blocks    Used Available Use% Mounted on/dev/sda2       51475068 5052580  43801048  11% /…

    2017-07-22
  • 自用vim环境参数设置

    基本显示设置 set nu mber 显示行号 syntax on 语法高亮 set cursorline 用浅色高亮当前行 set ruler 显示标尺 set showcmd 输入的命令显示出来,看的清楚些 set cmdheight=1 命令行(在状态行下)的高度,设置为1 set tabst…

    Linux干货 2017-04-24
  • 马哥教育网络班21期+第7周课程练习

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

    Linux干货 2016-08-30
  • 操作系统概述

                                 操作系统概述 对于一个真正的计算机系统来说,我们可以说它是由硬件+软件组成。没有软件的计算机,我们称它为裸机。当然,它也干不成什么事。所以,要想使得计算…

    Linux干货 2016-10-27
  • Linux基础命令语法

    Linux基础命令语法

    Linux干货 2018-03-11