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)
MozartMozart
上一篇 2017-08-03
下一篇 2017-08-03

相关推荐

  • rhel6.7安装pymssql(通过Python连接MSsql数据库)

    依赖安装: freetds、python-devel、cython、Python3.x 1、安装freetds tar -jxvf freetds-dev.0.99.134.tar.bz cd freetds-dev.0.99.134 ./configure –prefix=/usr/local/freetds&nb…

    Linux干货 2016-05-23
  • Nginx负载均衡

    基于Nginx的负载均衡以及高可用简单应用 一、负载均衡配置 1、Nginx负载均衡配置 前面配置好的Nginx,可以访问之后,克隆4台,统一配置为512M,因为我的电脑内存是4G的。一台用来访问,一台用来做调度器(Director),两台web服务器(real server),Nginx前面已经介绍过了,故在此简单介绍一下那台Director的配置。 2、…

    Linux干货 2016-12-29
  • N21_第7周_磁盘及文件系统管理

    N21_第7周_磁盘及文件系统管理 作业题目: 1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳…

    Linux干货 2016-09-26
  • 第六周作业

    博客具体内容请移步博客园:http://www.cnblogs.com/wangenzhi/p/6295141.html

    Linux干货 2017-01-17
  • diy自己的linux

    准备一台liunx的机器,我用的是liunx虚拟机 单独加载一块硬盘,我加载了一块20G的硬盘,然后用fdisk /dev/sdb进行分区,sdb1用来作为将来系统的/boot分区,所有100M就可以了,sdb2用来作为将来系统的/分区,我给了10G。然后将两个分区格式化为ext4系统。 mkdir /mnt/boot mkdir /mnt/sdc2 mou…

    Linux干货 2016-09-14
  • Hadoop伪分布式模型

    # java -version # vim /etc/profile.d/java.sh export JAVA_HOME=/usr # yum install java-1.8.0-openjdk-devel # mkdir /bdapps # tar xf hadoop-2.7.4.tar.gz -C /bdapps/ # cd /bdapps # ln…

    2017-12-08