Linux基础知识之文本查找和正则表达式扩展正则表达式

1.什么是正则表达式?

     正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的复制,让用户可以轻易达到查找、删除、替换某些特定字符串的处理程序。

     正则表达式基本上是一种“表示法”,只要工具程序支持这种表示法,那么该工作程序就可以用来作为正则表达式的字符串处理之用。支持正则表达式的工具一般有grep、sed、awk、vi/vim等工具。

 2.正则表达式和通配符有什么区别?

     通配符代表的是bash操接口的一个功能,通配符多用在文件名上,比如查找find,ls,cp等。

     正则表达式则是一种字符串处理的表示方式,正则表达式用在文本过滤工具里,比如grep,awk,sed等。

 3.正则表达式的分类?

     正则表达式的字符串按照表示方式依照不同的严谨度而分为基础正则表达式和扩展正则表达式。

 4.使用正则表达式需要特别注意的点?

     使用正则表达式时,需要特别留意当时环境的语系为何,否则可能会发现结果可能和别人的不相同。echo $LANG:查看所处环境的语系。

     grep在数据中查找一个字符串时,是以整行为单位来进行数据的选取。

 5.基本正则表达式符号代表的含义:

     特殊符号      代表的含义

[:alnum:]       所有的数字和字母,0-9,a-z,A-Z

[:alpha:]       所有的字母,a-z,A-Z

[:space:]       所有的空白字符,空格和TAB

[:digit:]       所有的数字,0-9

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

[:lower:]       所有的小写字母,a-z

[:upper:]       所有的大写字母,A-Z

 6.grep命令的基本用法:

      grep:根据模式,搜索文本,并将符合模式的文本行显示出来。

      Pattern:由文本字符和正则表达式的元字符组合而成匹配条件

      grep [OPTIONS] PATTERN [FILE…]

          -i:表示忽略大小写

          –color:把查找到的字符,用颜色标识出来

          -v:反向查找,显示没有被模式匹配到的行,匹配到的不显示

          -o:只显示被模式匹配到的字符串

          -E: 使用扩展正则表达式

          -A #:显示查找的文件的后#行,用–分开

          -B #:显示查找的文件的前#行,用–分开

          -C #:显示查找文件的前后各#行,用–分开

 7.正则表达式:Regular EXPression :REGEXP

      元字符:默认方式工作在贪婪模式下

          .:表示匹配任意长度的任意字符

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

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

          ^[^]:^在[]的内外是由区别的,[^]表示的是反向选择,^[]表示定位在行首的含义。

      字符的匹配次数(贪婪模式):尽可能长的去匹配,有部分匹配也行

          *:匹配其前面的字符任意次

            eg:a,b,ab,aab,acb,adb,amnb

            a*b:可以匹配的是:b,ab,aab(a出现任意次后面跟个b)

            a.*b:可以匹配的是:ab,aab,acb,adb,amnb(a开头b结束的任意长度的任意字符)

            a\?b:b,ab(上面是全部符合的,剩下的有一部分是符合的)

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

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

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

            a\{1,3\}b:可以匹配:ab,aab,只能匹配两个条件都符合的

            a.\{1,3\}b:可以匹配:aab,acb,adb,amnb(a和b中间的可以是一个两个或者三个)

         位置锚定

            ^:锚定行首(此字符后面的任意字符段必须出现在行首)

             eg: grep '^root' /etc/passwd

                 表示在下面查找的内容中,root必须是在行首出现

            $:锚定行尾(此字符前面的任意字符段必须出现在行尾)

             eg: grep 'root$' /etc/passwd

                 表示在下面查找的内容中,root必须是在行尾出现

            ^$:空白行

            \<或\b:锚定行首,其后面的任意字符必须作为单词首部出现

            \>或\b:锚定行尾,其后面的任意字符必须作为单词尾部出现

            \<root\>:整个的单词出现

          分组:

         \(\)

               \(ab\)*:ab可以出现一次两次,任意次,修饰的是ab这个整体

          后向引用

              \1:引用第一个左括号以及与之对应的右括号所包括的所有内容

              \(l..e\).*\1:后面查找的内容,必须和前面的内容一样

     扩展的正则表达式:工作在贪婪模式中

     扩展正则表达式的花括号不用使用反斜线

         字符匹配:

              ?:任意单个字符

              []:指定范围内的单个字符

              [^]:指定范围外的单个字符

         次数匹配:

              *:匹配其前面的字符任意次

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

              +:匹配其前字符至少1次

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

         分组:不需要加反斜线

              ():分组,真正的实现分组

              \1,\2,\3,…

         或者:  |   or

              a|b:ab有一个就行啊

              C|cat:只匹配单纯的C|cat。

          grep -E=egrep 用于扩展正则表达式的grep

          锚定的数字,必须是单个的字符出现,小数点不会被识别

 查找文件的基本演示:

     a.正则表达式:

     1.查找特定的字符串:(使用-n选项,默认显示查找到的行的行号)

          正向查找grep -n 'root' /etc/passwd

         blob.png

          反向查找grep -vn 'root' /etc/passwd  (除了含有root的两个没匹配,其余都匹配)

         blob.png

          查找的字符不区分大小写 grep -in 'Root' /etc/passwd

         blob.png

     2.查找以特定字符开头的字符串:

          grep -n '^root' /etc/passwd :查找以root开头的字符串

         blob.png

     3.利用[]来查找集合字符

          grep -n 'r[oa]ot' /etc/passwd :[]中无论几个字符,都是代表一个字符,相当于查询root raot

         blob.png

     4.利用[]来查找连续字符的内容

          grep ':[0-9]:' /etc/passwd : []中出现的范围的单个字符

         blob.png

     5.利用[^]来过来我们不想查找的内容

          grep -n 'r[^o]ot' /etc/passwd :[^]不会去查找[^]中的内容

         blob.png

     6.利用特殊符号来查找内容

          grep -n '^[^[:lower:]].' /etc/passwd :查找/etc/passwd 下面以非小写字母开头的字符

         blob.png

          grep -n '^[[:digit:]].' /etc/passwd :查找/etc/passwd 下面以数字开头的字符

         blob.png

     7.查找以特定字符结尾的字符串

          grep -n 'bash$' /etc/passwd :查找以bash结尾的字符串

         blob.png

     8.表示任意一个字符 .(表示一定有一个任意字符的意思)

          grep -n 'r..t' /etc/passwd :表示查找到的字符中是以r开头以t结尾,中间含有两个字符,但不指定中间这两个字符是什么

         blob.png

     9.表示重复字符*(表示*前面的字符可以重复0次到无穷次)

          grep -n 'ooo*' /etc/passwd :表示查找到的字符中最少含有oo,可以含有2-n个o字符

         blob.png

     10.表示以特定字符开头以特定字符结尾,中间含有任意个字符,为.*

          grep -n 'r.*t' /etc/passwd :表示r和o中间可以有很多个字符,不限定是什么

         blob.png

     11.表示限定连续多个字符范围 {}  (使用中{}需要转义为\{\})

          grep -n 'o\{2\}' /etc/passwd :表示查找的字符中含有仅含有两个o

         blob.png

          grep -n 'o\{1,3\}' /etc/passwd :表示查找的字符中含有1-3个o

         blob.png

      需要转义符特殊制定的符号:

          .–>\.   {}–>\{\}

     b.扩展正则表达式:需使用grep -E 或者egrep 跟后面的正则表达式

     1.表示查找一个以上的字符 +

          egrep 'ro+t' /etc/passwd :查找文件中以ro+t的字符,o出现一次或者n次

         blob.png

     2.表示前面出现零个或者一个前面的字符

          egrep 'roo?t' /etc/passwd :查找文件中以roo?t的字符,第二个o出现一次或者零次 查找的结果为 rot root 

         blob.png

     3.表示用或的方式找出数个字符串

          egrep 'raot|root|rot' /etc/passwd :查找文件中的raot|root|rot字符

         blob.png

     4.查找“组”字符串

          egrep 'r(a|o)ot' /etc/passwd :查找文件中root或raot 字符

         blob.png

     5.查找多个重复组的判别 ()+

          egrep 'r(ao)+t' /etc/passwd :查找文件中含有多个ao的字符

         blob.png

原创文章,作者:sjsir,如若转载,请注明出处:http://www.178linux.com/31290

(0)
sjsirsjsir
上一篇 2016-08-10
下一篇 2016-08-10

相关推荐

  • keepalived+nginx

    keepalived可以认为是VRRP协议在Linux上的实现,主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。本文基于如下的拓扑图: 配置keepalived+nginx的方…

    Linux干货 2016-11-04
  • Linux的软件包管理(RPM)

    软件包管理(RPM)   本章节内容:   软件运行环境   软件包基础  Rpm包管理   一、软件运行环境(了解API和ABI)  API:应用程序开发接口,POSIX国际标准。  程序源代码–> 预处理–> 编译–&…

    Linux干货 2016-08-21
  • Linux终端和伪终端简述

    本文简述Linux各种类型终端的区别以及如何用命令查看终端类型

    Linux干货 2018-03-26
  • 高级文件系统之-LVM管理

    lvm应用 lvm的重点在于可以弹性的调整filesystem的容量! 而并非在于数据的存储效率及安全上面。 需要文件的读写效能或者是数据的可靠性是RAID所考虑的问题。 lvm:逻辑卷管理器 允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小 允许在多个物理设备间重新组织文件系统 将设备指定为物理卷 用一个或者多个物理卷来创建一个卷组 物理卷是用固定…

    Linux干货 2016-09-02
  • ansible 入门与进阶

    ansible 入门与进阶 Configuration、Command and Control 是什么 ? SSH-based configuration management, deployment, and task execution system 运维工具的分类: agent:基于专用的agent程序完成管理功能,puppet, func, zabb…

    2016-11-09
  • Bash学习基础知识一“命令”

    Bash 学习基础知识 目录 一、Shell是个啥? 二、BASH的命令     2.1 命令的语法格式     2.2 什么是命令     2.4 命令的类型     …

    Linux干货 2015-04-03