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 10:27
下一篇 2016-08-10 10:27

相关推荐

  • Ansible 详细用法说明

    Ansible 一、概述 运维工具按需不需要有代理程序来划分的话分两类: agent(需要有代理工具):基于专用的agent程序完成管理功能,puppet, func, zabbix agentless(无须代理工具):基于ssh服务完成管理,ansible, fabric 二、简介   Ansible是一个简单的自动化运维管理工具,基于Python语言实现…

    2016-11-07
  • rsyslog将日志记录于MySQL中,并用loganalyzer进行分析日志

    1、首先来安装lamp环境的支持,与其相关的软件包      # yum -y install rsyslog-mysql mariadb-server php php-mysql php-gd httpd       说明:rsyslog-mysql在数据库中生成一个库文件,但这个文件需…

    Linux干货 2013-09-03
  • Linux系统基础(二)

    一、Linux文件管理命令及其常用方法 1、cd(切换目录)这个命令应该是Linux中用的最频繁的一个命令之一了,因为我们经常需要进行目录的切换。在详解这个命令之前,首先得补充一个重要的知识,就是我们常用的一些比较特殊的目录: .        代表当前目录 .. &n…

    Linux干货 2016-09-24
  • 马哥教育网络班21期+第6周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@centos ~]# cp /etc/rc.d/rc.sysinit /tmp/ [root@centos&nbs…

    Linux干货 2016-07-27
  • Linux 2.6.39-rc3的一个插曲

    2011年4月12日,Linux 2.6.39-rc3发布了,Linus Torvalds写了一个发布邮件,其中包含了一个长长的为这个版本做过贡献的人员名单,这个名单中有很多看上去应该是中国人的名字,我挺为他们感到骄傲的(不知道你是否还记得以前本站的”Linux是由谁写的“)。 不过,没过一会,发现了一个bug,经过大家的调查(2.6.38版没有发现这个问题…

    Linux干货 2016-06-09
  • 第十周

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 1.开启电源后,POST自检:检查硬件设备,通过后交给BIOS 2.BIOS加载可选择的启动设备,寻找可引导的启动设备的记录:MBR 3.MBR:硬盘的主引导记录,存在于0磁道0扇区,共512字节.其中Bootloader占用446字节,分区表占用64字节,magic nu…

    Linux干货 2016-10-17