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

相关推荐

  • 数据结构应用详解-

    概述 最小生成树——无向连通图的所有生成树中有一棵边的权值总和最小的生成树 拓扑排序 ——由偏序定义得到拓扑有序的操作便是拓扑排序。建立模型是AOV网 关键路径——在AOE-网中有些活动可以并行地进行,所以完成工程的最短时间是从开始点到完成点的最长路径的长度,路径长度最长的路径叫做关键路径(Critical Path)。 最短路径——最短路径问题是…

    Linux干货 2015-04-07
  • linux权限管理

    linux文件权限    文件的属性和权限的设置对于linux系统来说是相当重要的,如果对这一块的知识没有一个深入的了解,你的系统就有可能有很大的危险。那么首先我们来看一看文件的属性所对应的都是什么意思吧。 上图第一个字符是d,他代表了文件的类型,d的意思就是目录文件,那么除了目录文件还有什么文件呢?    …

    Linux干货 2016-08-04
  • 文本过滤、文本查找工具应用示例

    文本过滤、文本查找工具应用示例 1.显示当前系统上root、fedora或user1用户的默认shell [root@localhost ~]# cat /etc/passwd|grep “^root\>\|^fedora\>\|^user1\>”|cut -d: -f7 /bin/bash /bin/bash /bin/bash 2.找出…

    Linux干货 2017-07-30
  • NET25_第6周作业

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; (1) cp /etc/rc.d/rc.sysinit /tmp cd /tmp vim rc.sysint vim命令::%s/\(^[[:space:]]\)\+/#\…

    Linux干货 2017-03-15
  • Linux基础知识之根下各目录的介绍

    /bin  :所有用户使用的基本用户命令文件,二进制格式的 /sbin :供系统管理使用的工具程序 /boot :引导加载器必须用到的各静态文件:kernel initramfs(initrd),grub /dev  :存储特殊文件或设备文件;设备的类型:字符设备,块设备; /etc  :系统程序的静态配置文件,只能为静态的不能…

    Linux干货 2016-07-10
  • 自制linux与内核编译

    自制Linux系统 1分区并创建文件系统 fdisk/dev/sdb 分两个必要的分区 /dev/sdb1对应/boot /dev/sdb2对应根/ mkfs.ext4 /dev/sdb1 mkfs.ext4 /dev/sdb2 2挂载boot mkdir/mnt/boot mount /dev/sdb1 /mnt/boot ? 3安装grub grub-i…

    Linux干货 2016-09-13