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

相关推荐

  • 私人定制-linux系统和grub启动流程中问题及解决方案

    系统的启动流程;     POST加电自检–>Boot Sequence(BIOS)–>Boot Loader(MBR)–>kernel(Ramdisk)–>rootfs–>switchroot–>/sbin/i…

    Linux干货 2016-09-13
  • shell脚本编程入门

    什么是shell脚本,其实,shell脚本就是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与命令(包含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能等这些命令的组合起来,以达到我们所想要的目的。 程序编程风格有两种: 过程式:以指令为中心,数据服务于指令。 对象式:以数据为中心,指令服务于数据。 过程…

    Linux干货 2016-08-18
  • 第一周作业

    1. 描述计算机组成及其功能 说到计算机组成,就必须提及计算机之父冯洛伊曼先生。是他早年最先提出了计算机体系结构的设想,并沿用至今。 计算机由五大基本组件组成: 运算器 进行算术运算和逻辑运算的主要部件; 控制器 控制器从存储器中逐条取出指令、分析指令,然后根据指令要求产生一系列命令,控制计算机各部件; 存储器 分为内存和外存,…

    Linux干货 2016-12-02
  • 用户管理

    http://www.jianshu.com/p/a07ae29ca345

    Linux干货 2017-07-23
  • ​Bash2

    字串比较时变量最好使用"" 这样就不会报错了,只是退出码不为0 组合条件:     与:[ condition1 -a condition2 ]或condition1 && condition2     或:[ condition1 -o co…

    Linux干货 2016-09-25
  • 硬盘基础知识及 MBR、GPT分区格式

    一,硬盘知识     硬盘接口类型:          并行:             IDE: 133MB/s &n…

    Linux干货 2016-09-19