Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

之前的句子

烟锁池塘柳 炮镇海城楼

因荷而得藕 有杏不需梅

认识于小林寒风的一篇小说《凤山遗梦》

grep

grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

作用:文本搜索工具,根据用户指定的模式对目标文本逐行进行匹配检查;打印匹配到的行。模式:由正则表达式字符及文本字符所编写的过滤条件

用法:

grep [OPTIONS] PATTERN [FILE…]

简单示例:

Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

grep命令选项

–color=auto  :对匹配到的文本着色显示,(CentOS7中“别名”alias中已设置)

-v  :显示不被pattern匹配到的行,反向匹配行。

-i  :忽略字符大小写

-n  :显示匹配的行号

-c  :统计匹配的行数

-o  :仅显示匹配到的字符串

-H, –with-filename当搜索多个文件时,显示匹配文件名前缀

-h–no-filename当搜索多个文件时,不显示匹配文件名前缀

-q  :静默模式,不输出任何信息(注重执行过程,不注重执行的结果)

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

示例:grep –e root –e magedu /etc/passwd

Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

-w  :匹配整个字符串

-E  :使用ERE,扩展正则表达式egrep

-F  :相当于fgrep,一个换行符分隔的字符串的集合fgrep,不支持正则表达式。

-A#  after,打印匹配本身以及后#行行

-B#  before, 打印匹配本身以及前#行行

-C#  context, 打印匹配本身以及前后各#行行

正则表达式

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。简单来说,正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串

正则表达式可分为两类:基本正则表达式:BRE,扩展正则表达式:ERE

按元字符分类:字符匹配、匹配次数、位置锚定、分组,根据元字符分类我们一一介绍两类正则表达式。

基本正则表达式BRE

用法:grep [OPTIONS] PATTERN [FILE…]

元字符分类:

1)字符匹配:

. :匹配任意单个字符

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

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

[:alnum:] :字母和数字

[:alpha:] :代表任何英文大小写字符,亦即A-Z,a-z

[:lower:] :小写字母[:upper:]大写字母

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

[:space:] :水平和垂直的空白字符(比[:blank:]包含的范围广),任何产生空白的字符。

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

[:digit:] :十进制数字

[:xdigit:] :十六进制数字

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

[:print:] :可打印字符

[:punct:] :标点符号

2)匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

* :匹配前面的字符任意次,包括零次无限次

.* :任意长度的任意字符

\? :匹配其前面的字符01

\+ :匹配其前面的字符至少1

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

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

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

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

3)位置锚定:定位出现的位置

^ :行首锚定,用于模式的最左侧

$ :行尾锚定,用于模式的最右侧

^PATTERN$ :用于模式匹配整行

^$ :空行

^[[:space:]]*$ :空白行

\<或或\b词首锚定,用于单词模式的左侧

\>或或\b词尾锚定;用于单词模式的右侧

\<PATTERN\>匹配整个单词

4)分组:

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,例如:\(root\)\+

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,…其中涉及后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符(具体用法可查看扩展正则表达式中的举例)

\|:逻辑关系or 或

示例:显示/proc/meminfo文件中以大小s开头的行

Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

扩展的正则表达式ERE

用法:egrep [OPTIONS] PATTERN [FILE…]  其中:egrep等价于grep –E

元字符分类:

1)字符匹配:

. :任意单个字符

[] :指定范围的字符

[^] :不在指定范围的字符

2)次数匹配:

:匹配前面字符任意次

?  :01

1次或多次

{m}  :匹配m

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

3)位置锚定:

^  :行首

$ :行尾

\<,\b :语首

\>,\b :语尾

4)分组:

():将一个或多个字符捆绑在一起,当作一个整体进行处理,例如:\(root\)\+分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,…,其中涉及后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

示例:后向引用,

显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行。

 cat /etc/grub2.cfg | grep “^\([[:blank:]]\)\{1,\}[^\1]” 

Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

|:逻辑关系 或 or (相似基本正则表达式)

简单对比一下就会发现,基本正则表达式和扩展正则表达式的区别就在于拓展正则表达中好多符号可以不用加“\”转义字符,除了后向引用“\1\2…”和位置锚定“\b\>…

文本处理工具系列圆满结束,以后发现需要补充的会及时更新,最后的往往是最重要的,此次总结可能存在疏漏,请各位大佬批评指正。

文本处理工具系列<1>http://www.178linux.com/82973       <2>http://www.178linux.com/83083

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

(0)
上一篇 2017-08-03 11:32
下一篇 2017-08-03 19:36

相关推荐

  • MySQL/MariaDB数据库基于SSL实现主从复制

    前言 备份数据库是生产环境中的首要任务,重中之重,有时候不得不通过网络进行数据库的复制,由于MySQL/MariaDB的主从复制是明文传送的,如果在生产环境中跨网络传送,数据的安全性就无法完全保证,为了解决这一问题,我们需要一种安全的方式进行传送,即基于SSL加密进行数据传输。 部署配置 实验拓扑 实验环境 系统环境:CentOS6.6 数据库版本:mari…

    Linux干货 2015-06-21
  • 初入命令世界

    一、inode节点号         在linux中,每一个文件都有唯一的inode号,inode号也是系统识别的唯一编码,而文件名仅仅是为了使用者区分辨认, inode (index node )表中包含文件系统所有文件列表 一个节点(索引节点)是在一个表项,包含有关…

    2017-05-26
  • bash通配符和正则表达式元字符部分归纳

    Linux中有各种各样的字符,而且在不同环境和不同命令之下含义也不同 作为新手,决定先归纳学到的符号,方便后面学习厘清它们之间的关系。 glob 简化了的正则表达式 bash默认通配符: ? :只匹配一个任意字符; * :匹配零个或多个任意字符;   [^] :方括号及其中^中的取反 [abc]:匹配任何一个列在方括号中的字符(这个例子要么匹配一个…

    Linux干货 2016-04-11
  • find—查找条件

    find—查找条件    目 录 一、根据时间戳查找: 二、根据权限查找 三、根据文件所属人owner,文件所属组group查找 四、根据搜索层级查找 五、根据文件名查找 六、根据文件类型查找    find实时查找工具,通过遍历指定路径完成文件查找 (1)工作特点: 查找速度略慢 精确查找 实时查找 可以只…

    Linux干货 2017-08-13
  • 磁盘配额的限制

    用一个块新的分区当做硬盘进行磁盘的配额限制实验 堆一块新的硬盘进行三步骤 分区,格式化,挂载 以/dev/sdb为例  (1) 分区: fdisk /dev/sdb sdb 8:16 0 200G 0 disk └─sdb1 8:17 0 10G 0 part (2) 格式化: mkfs.ext4 /dev/sdb1 /dev/sdb1: UUID…

    Linux干货 2017-04-30
  • MBR分区和GPT分区详解

    什么是磁盘分区?               磁盘分区是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分,盘片一旦划分成数个分区(Partition),不同类的目录与文件可以存储进不同的分区。越多分区,也就有更多不同的地方,可以将文件的性质区分得更细,按…

    Linux干货 2016-08-29