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

相关推荐

  • 从shell眼中看世界–展开和引用

    这篇博客的目的在于加深对于展开和引用的理解,阐释展开和引用之间联系。 ‘ ‘ :强引用,其中的变量引用不会被替换为变量值,而保持原字符串       ” “:弱引用,其中的变量引用会被替换为变量值    如果之前对于’ …

    Linux干货 2017-04-16
  • Nginx之ngx_http_proxy_module模块详解

    一、正反向代理简介       1、正向代理:局域网内的机器借助于代理服务器访问局域网外的网站          这时正向代理的功能:         &nbs…

    2017-06-25
  • Linux学习第四周

    一.Linux文件查找  本章介绍的有locate和find的命令的使用以及压缩解压缩工具 1.文件查找,跟以前我们所学的grep fgrep egrep 类似,grep属于文本过滤,搜索工具 然而文件查找就find和locate 他们有一点区别: find :实时查找进行文件匹配,由于进行路径匹配所以查找速度略慢,     &…

    2017-06-11
  • bash代码注入的安全漏洞

           很多人或许对上半年发生的安全问题“心脏流血”(Heartbleed Bug)事件记忆颇深,这两天,又出现了另外一个“毁灭级”的漏洞——Bash软件安全漏洞。这个漏洞由法国GNU/Linux爱好者Stéphane Chazelas所发现。随后,美国电脑紧急应变中心(US-CERT)、红帽以及多家从事安全的公…

    Linux干货 2015-03-30
  • shell脚本编程

    一、编程基础: shell脚本是包含一些命令或声明,并符合一定格式的文本文件 shell脚本的用途有: 自动化常用命令 执行系统管理和故障排除 创建简单的应用程序 处理文本或文件 1)     第一步:使用文本编辑器来创建文本文件 script.sh 并编写内容 格式要求:首行shebang &nb…

    Linux干货 2016-08-15
  • Nginx 基础 (IO模型、编译安装、几大块配置文件详解)

    Nginx基础 前言 apache在设计的时候已经考虑了并发访问模型,select()机制可以响应1024个访问,但是当数量再大,千万级别的时候http就响应不过来了。这个时候,nginx的出现解决了这一个问题。nginx是一个安装简单、配置文件简单、占用内存少、稳定性高、处理并发能力非常强、灵活好用等有点聚集于一身的轻量级服务器。在Linux操作系统中,N…

    Linux干货 2016-12-24