grep与正则表达式

一、grep

       grep常用于文本搜索。通过自定义的模式(pattern),筛选出使用者需要的文本内容。除了有grep,还有egrep和fgrep。其中egrep = grep  –E,而fgrep则是不支持正则表达式。

       grep语法:grep [option] pattern [file] 

       常用option如下:

              -i:忽略字符的大小

              -n:显示匹配的行号

              -c:统计匹配的行数

              -o:只显示匹配到的内容

              -q:静默模式,不显示出任何信息

              -e:实现多个选项的or的关系

              -w:匹配整个单词

              -v:显示除pattern外的内容

              -F:相当于fgrep

              -E:相当于egrep

二、正则表达式

       1、匹配字符:

              .     匹配任意单个字符

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

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

              [:alnum:] 匹配字母和数字

              [:alpha:]  匹配任何英文

              [:lower:]  小写英文字母

              [:upper:]  大写英文字母

              [:blank:]  空白字符(空格和字表符)

              [:space:]  水平和垂直的空白字符(范围比blank的广)

              [:cntrl:]   不可打印的控制字符(退格、删除、警铃等)

              [:digit:]   十进制数字

              [:xdigit:]  十六进制数字

              [:graph:]  可打印的非空白字符

              [:print:]   可打印的字符

              [:punct:]  标点符号

       2、匹配次数:

              *  匹配前面的字符任意次,包括0次。

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

              \+   匹配前面的字符至少一次

              \{n\} 匹配前面的字符n次

              \{m,n\} 匹配前面的字符从m到n次

              \{,n\}  匹配前面的字符至多n次

              \{n,\}  匹配前面的字符至少n次

      3、定位

              ^ 定位行首,处于pattern的最左侧

              $ 定位行尾,用于pattern的最右侧

              \<或\b 词首,用于pattern中单词的左侧

              \>或\b 词尾,用于pattern中单词的右侧

              \<pattern\> 匹配整个单词

       4、分组

              \( \)将一个或多个字符捆绑在一起,当作一个整体进行处理。

三、小结

       通过一和二的简单介绍,现在将两者结合在一起,并把学习后得到的一些理解写下来。

1、pattern可以直接为想要得到的内容,如图1。

grep与正则表达式

图1

2、[ ]中括号里表示的是匹配的内容的范围,用此括号匹配的结果是一个字符。比如[a-d]表示的是英文abcd这个范围。[ ]不只表示一种范围、内容,可以有多种,比如[a-z[:punct:]0-9]表示的是标点符号、英文字母a至z还有数字0-9。但是没有[0-10]或者是[0-100]等类似的范围,因为在pattern中把需要被过滤的内容都当作字符,而内容中的数字也被拆成一个个字符,没有大小可言,简单点说就是100其实是三个字符1、0、0。还有,单独用类似上文“二”中的[:digit:]这样的内容是会出错的,需要在[:digit:]外再加一个中括号才能表示匹配得到的是一个在digit范围内的字符,如图2。

grep与正则表达式

图2

3、再次强调一点,[ ]表示的是匹配得到一个字符,是一个。因此,需要得到多个字符,得用上文
“二”的第二点知识,如图3。

grep与正则表达式

图3

4、\< \>中间括起来的可以为英文和数字,但是不能是别的标点符号,如图4。

grep与正则表达式

图4

“\<\>”和“\>”是把一串连续的英文数字当作整体,而“\<”不是,如图5最后两个命令都匹配不到内容,是因为“\<\>”和“\>”认为存在abcd但不存在abc。

grep与正则表达式

图5

5、\(和\)必须成对出现,并且他们被当作一个整体进行处理,并且分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量,命名方式:\1,\2,\3…

示例:\(string1\+\(string2\)*\)

\1:string1\+\(string2\)*

\2:string2

6、 grep –E 作用:除了\<和\>,其他的例如{ }、( ),没有添加-E时,\{\}表示范围,添加了-E选项后,直接{}表示范围。

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

(0)
EminemEminem
上一篇 2017-07-29
下一篇 2017-07-29

相关推荐

  • vsftpd相关应用解析

    FTP(File Transfer Protocol)文件传输协议 FTP 是 TCP/IP 协议组中的协议之一。该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称…

    2017-06-06
  • Haproxy+Keepalived+Varnish+LAMP+Memcacked+NFS 实现WordPress站点的动静分离

    详细说明,请点击CSDN博客的连接地址:http://blog.csdn.net/yhy1271927580/article/details/70195158

    2017-04-16
  • Linux shell之bash特性大全详解(持续更新ing)

    一、shell是什么?     Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中…

    Linux干货 2016-03-09
  • Linux学习总结及练习&day08-sed文本处理工具

    第一部分、Linux文本处理三剑客之sed(Stream EDitor)文本编辑工具     一、sed的基本功能工作原理     sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令…

    Linux干货 2016-08-10
  • MHA–master在线修复

    本次实验基于【MHA+keepalive 高可用MYSQL集群】(续) 一、恢复背景 二、修复故障节点及MHA集群 三、提升已修复的节点为master 四、注意事项 一、恢复背景 1、设备清单 2、:percona-xtrabackup-2.3.2 (注:生产环境应定时备份;不应等到数据库DOWN后才备份,以免加剧集群的压力) 备份数据库操作: [root@…

    2017-03-01
  • LVM2 逻辑卷管理工具

    LVM2:  LVM: Logical Volume Manager, Version: 2  dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块; /dev/dm-#  /dev/mapper/VG_NAME-LV_NAME /dev/mapper/vol0-root /dev/VG_NAME/…

    Linux干货 2015-09-19