如何使用正则表达式

正则表达式(Regular Expression)就是使用简单的字符按照预先设定的规则来完成复杂的功能,说白了,正则表达式是一种字符串的匹配方式,就是用预先设定好的规则来描述我们想要表达的内容,它是由普通字符以及元字符组成的字符串,其中元字符不表示本身的意义,而是用于表达控制或通配等功能。

为什么要用这个东西那,我想,每一个学习计算机的人都应该明白,计算机就是我们用数字来描述这个现实的世界,而如何使用数字来描述这个现实世界那,就必须用到字符,正则表达式之所以无比重要就是因为可以通过它来找到我们想要的东西,我们知道,对于linux系统管理来说,最重要的工作就是通过修改配置文件来实现系统管理工作的,而面对浩瀚的配置文件,如何能找到我们想要修改的内容那,有了正则表达式,就会大大减轻我们的工作量,下面就让我介绍一下linux文本搜索工具。

Linux下的文本搜索工具主要就三个:grepegrepfgrep;这三个工具主要功能就是根据用户指定的文本模式,这个文本模式是由正则表达式元字符以及正常字符组合而成,对目标文件进行逐行搜索,然后显示能匹配到的行。

grep命令使用方法:

    grep  [OPTION]  PATTERN   [FILE ….]

重要选项介绍:

    –color:用来指定匹配内容的颜色,主要参数有:auto alwaysnever

例如:grep  –color=auto  “root”  /etc/passwd

color.png

       -v :反向显示

       -o :只显示能匹配到的内容而不显示能匹配到这一行的其他内容

       -i : 搜索时不区分大小写

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

       -A#:被模式匹配到的行的下#行也一起显示

   -B#:被模式匹配到的行的前#行也一起显示

   -C#:被模式匹配到的行的前后#行也一起显示

 

以上就是grep命令的常用常见,接下来我们详细介绍grep搜索的模式,也就是正则表达式

  1. 字符匹配

              .  :匹配任意的单个字符

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

              [[:digit:]][0-9]:表示0-9范围内任意单个数字

              [[:lower:]][a-z]表示a-z范围内任意单个字母

              [[:upper:]][A-Z]:表示A-Z范围内任意单个字母

              [[:alnum:]][0-9a-zA-Z]:表示任意大小写字母或数字

              [[:alpha:]][a-zA-Z]:表示任意大小写字母

              [[:space:]]表示任意空格

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

  2、次数匹配:在期望匹配字符的后面提供一个控制符,用来表达匹配其前面字符指定的次数。

*    :表示任意长度,0次、1次、或多次

\?   :匹配其前面的字符可以1次或0次,也就是说前面字符可有可无

\+   :1次或多次,表示左侧字符至少出现一次

\{n\}   :n次表示其左侧字符精确出现n

\{m,n\}  :至少m次,至多n

\{0,n\}   :至多n

\{m,0\}   :至多m

 3、位置锚定

                ^  :用来锚定行首

                $  :用来锚定行尾

 4、单词锚定:有非特殊字符组成的连续字符串

                \<\b  :锚定词首

                \>\b  :锚定词尾

                 \<PATTERN\>   :匹配PATTERN能匹配到的整个单词

 5、分组:在分组中的模式在某次具体的匹配过程中所匹配的字符,可以被grep记忆,保存于内置的变量中,这些变量是(\1\2…..\9)因此还可以被用来引用,其中(\1)用来引用自左而右由第一个左括号以及与之对应的右括号中模式所匹配到的内容,其中(\2)用来引用自左而右由第二个左括号以及与之对应的右括号中模式所匹配到的内容;

例如创建一下文本文件

QQ截图20151024142601.png

使用使用\1引用前一个模式总所匹配到的内容

QQ截图20151024142646.png

 

 

 接下来我们详细介绍egrep搜索的模式,也就是扩展正则表达式

    egrep命令使用方法:

    egrep  [OPTION]  PATTERN   [FILE ….]

 

 1、字符匹配

             .  :匹配任意的单个字符

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

             [[:digit:]][0-9]:表示0-9范围内任意单个数字

             [[:lower:]][a-z]:表示a-z范围内任意单个字母

            [[:upper:]][A-Z]:表示A-Z范围内任意单个字母

            [[:alnum:]][0-9a-zA-Z]:表示任意大小写字母或数字

            [[:alpha:]][a-zA-Z]:表示任意大小写字母

      [[:space:]]表示任意空格

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

 2、次数匹配:在期望匹配字符的后面提供一个控制符,用来表达匹配其前面字符指定的次数。

*    :表示任意长度,0次、1次、或多次

?   :匹配其前面的字符可以1次或0次,也就是说前面字符可有可无

+   :1次或多次,表示左侧字符至少出现一次

{n}   :n次表示其左侧字符精确出现n

{m,n}  :至少m次,至多n

{0,n}   :至多n

{m,0}   :至多m

 3、位置锚定

                ^  :用来锚定行首

                $  :用来锚定行尾

 4、单词锚定:有非特殊字符组成的连续字符串

               \<\b  :锚定词首

               \>\b  :锚定词尾

               \<PATTERN\>   :匹配PATTERN能匹配到的整个单词

 5、分组:在分组中的模式在某次具体的匹配过程中所匹配的字符,可以被grep记忆,保存于内置的变量中,这些变量是(\1\2…..\9)因此还可以被用来引用,其中(\1)用来引用自左而右由第一个左括号以及与之对应的右括号中模式所匹配到的内容,其中(\2)用来引用自左而右由第二个左括号以及与之对应的右括号中模式所匹配到的内容;

 

fgrep表示匹配的模版都被看做是字符串,因此元字符都作为普通字符来处理,使用方法类似,因此不做详细描述。

 

 正则表达式现在广泛应用于Unix系统、Linux系统以及PHPC#Java等开发环境中,灵活的运用正则表达式可以极大的简化日常工作,就好比每一个成为武林高手所必备的基本功,每一招每一式都需要勤加练习,这样才能做到运用自如。

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

(0)
zhangzhang
上一篇 2015-10-27
下一篇 2015-10-27

相关推荐

  • 编译安装Linux内核

    实验前准备:在https://www.kernel.org/下载内核 这里我们下载的是:linux-4.14.10.tar.xz du -sh /app/linux.tar/ 此命令可查看内核文件大小 编译完成后/lib/modules下会生成4.14.10版的内核 1,tar xvf linux-4.14.10.tar.xz -C /app/解压缩准备好的…

    2018-01-03
  • linux 常用命令

    命令1 rm 作用: 删除指定的文件  选项 作用 -f 强制删除 -i 删除前提示询问 -r  或  -R 递归处理,删除指定目录下的所有文件包括子目录 -v 显示指令执行过程 -d 直接把删除目录的硬连接数据删成零,删除该目录 命令2 终端(tty): 终端类型 开启方式 物理终端 console 控制台console 虚拟…

    Linux干货 2017-07-13
  • shell与kernel的理解

    Shell 的英文释义是外壳,与kernel 内核名词遥相呼应,一外一内,一壳一核。内核就像瑞士银行的金库,存放着客户的黄金等众多的(硬件)资产,闲杂人等(包括客户)当然是严格禁止入内的,而作为客户要存取金库中的资产则需要通过专门的特定管理人员代为操作完成,并把存取(操作)的结果呈现给客户。在Linux操作系统中,shell的职能就类似于金库的操作人员,客户…

    Linux干货 2016-02-14
  • Linux文件系统的最基本数据结构:inode和block

    Linux文件系统的最基本数据结构:inode和block 为什么有inode和block inode block 创建目录或文件 使用场景 查看本机的文件系统信息 Linux文件系统的最基本数据结构:inode和block 为什么有inode和block 由于Linux系统是多用户多的,所以文件系统类型多样化是在所难免的。从ext2开始,是将文件属性和文件…

    Linux干货 2016-09-06
  • Linux上获取命令帮助信息及man文档划分

    1.Linux上获取命令帮助信息的多种途径 Linux上获取命令帮助信息有多种途径,但不同的命令类型获取帮助信息也有不同,Linux命令类型主要分为两种: (1)内部命令:指的是集成于Shell解释器程序(如Bash)内部的一些特殊指令,也成为内建(BuiltIN)指令。 内部命令属于Shell的一部分,所以并没有单独对应的系统文件,只要Shell解释器被运…

    Linux干货 2016-10-30
  • 马哥教育网络班21期+第12周课程练习

    httpd学习前知识必备: I/O类型 同步和异步 synchronous asynchronous  关注的是消息通知机制,如何通知调用者,站在被调用者的角度 同步:调用发出后不会立即返回,一旦返回即是最终结果 异步:调用发出后会立即返回消息,但不是最终结果,被调用者通过状态,通知机制,或回调函数处理结果 阻塞和非阻塞 block nonbloc…

    Linux干货 2016-08-15

评论列表(2条)

  • stanley
    stanley 2015-10-27 23:15

    内容很丰富,格式上有些乱失去了层次主次,不容易吸引用户

  • Wlibang
    Wlibang 2015-12-06 09:22

    [[:lower:]]或[a-z]:表示a-z范围内任意单个字母 前者精确匹配小写字母,后者不区分大小写