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 17:27
下一篇 2017-07-29 17:41

相关推荐

  • tar ,cpio打包解压. shell脚本for,while,until循环. rpm包管理,循环的特殊用法. select循环菜单,函数function,rpm包查询,yum

    tar  tar -cf 路径+文件名字后续.tar  +路径 创建归档压缩 tar cf /testdir/etc.tar /etc/ tar cvf 可以查看解压过程 tar tvf 预览作用 tar xvf 解压文件  tar zcvf /testdir/etc2.tar.gz /etc/ 解压再压缩到指定路径,文件格式 …

    Linux干货 2016-08-21
  • 初识Linux基础

    一:计算机的组成及其基本功能 计算机主要由五大基础部件组成:控制器,运算器,存储器,输入设备,输出设备。 1、控制器:计算机的核心组件,协调各程序的运行,对计算机的各项资源进行控制分配; 2、运算器:计算机实现算术运算以及逻辑运算的部件; 3、存储器:计算机用来存放数据和程序的基本部件,存储器由若干存储单元组成,每个存储单元都有一个             …

    Linux干货 2018-03-04
  • LInux 网络及相关进程作业管理

    马哥教育网络班23期+第四周课堂练习 Linux 网络及相关进程作业管理 一、概述 1.1 简介: 进入Linux学习第四周,这一周讲的知识点非常的多,也特别的碎,感觉这一周的内容掌握起来有很大的难度,主要是要记的命令很多,包括yum 的一些安装的命令,配置yum 源,相关的网络的命令和参数,还有就是进程管理和作业管理中的相关工具的使用,最后还讲了bash脚…

    Linux干货 2016-10-24
  • LVM(重要)

    LVM   LVM(Logical Volume Manger),是一种磁盘分区管理机制,可以灵活的调整分区的大小。它是将多个硬盘组成卷组的形式实现的。说白了就是通过软件来实现对分区灵活管理。   LVM是将多块硬盘组成PV,再由PV组成VG,VG再组成lv,然后在lv上创建文件系统。   物理存储介:指的就是硬盘等,最基本的存储单元。   PV(physi…

    Linux干货 2016-08-30
  • N22-第十一周作业

    1、详细描述一次加密通讯的过程,结合图示最佳。 (1)数字签名 A与B通信,B发给A一段数据,为了证明数据确实是B发送过来的,B首先会用单向加密算法从数据中提取一段特征码,然后用自己的私钥加密这段特征码和原始数据后,发送给A;A接受到数据,首先用B的公钥解密,获取到特征码和原始数据;然后用同样的单向加密算法从原始数据中提取一段特征码,与之前用公钥解密得到的特…

    Linux干货 2016-11-01
  • Linux的哲学思想及Linux发行版

    讲述一下几个问题: 第一,Linux的哲学思想;第二,Linux发行版的基础目录名称,命名法则和功用规定;第三,Linux不同发行版之间的联系和区别。 Linux的哲学思想: 1、一切皆文件。是Unix/Linux的基本哲学之一,不仅普通的文件,目录,字符设备,块设备,套接字等在Unix/Linux中都是以文件被对待。 2、小型,单一用途的程序。程序和可执行…

    Linux干货 2016-09-17