正则表达式和文本处理工具grep,egrep

正则表达式(Regular Expression)是通过一些特殊字符的排列,来表示控制或者通配的功能,用于查找,替换,删除一行或者多行文字字符串,是用在字符处理上的一项表达式,有时候我们可通过表达式来筛选出我们所需要的信息。

正则表达式分为两类:基本正则表达式(BRE)和扩展的正则表达式(ERE)

正则表达式基本上是一种“表示法”,只要工具程序支持这种表示法,那么该工具就可以用来做字符串处理,例如vim,grep,awk,sed….等

基本正则表达式的元字符:

我们这里基本正则表达式的元字符和giobbing的元字符有些相似,也有些不同.这里我们应该忘记giobbing的元字符来重新学习正则表达式的元字符,这里不能混淆!giobbing只是shell里面支持的文件名通配

字符匹配:

.:匹配任意单个字符;

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

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

匹配的字符集:

[:digit:];所有的数字

[:lower:];所有的小写字母

[:upper:];所有的大写字母

[:alpha:];所有的字母

[:punct:];所有标点符号

[:space:];空白字符

[:alunm:];所有字母和数字

匹配次数

要用在指定出现次数字符的后面,用于限制其前面字符出现的次数;默认工作在贪婪模式中

*:匹配其前面的字符任意次;0次1次或者多次

例如:grep "t*b"

txxbb:匹配;t有出现一次

yxb:匹配;t有出现0次

tttttttpb :匹配;t有出现多次

abc:匹配;t有出现0次

\?:匹配其前面的字符0次或1次,即前面的字符可有可无;
\+:匹配其前面的字符1次或者多次,即前面的字符至少要出现一次;
\{m\}:匹配其前面的字符m次;
\{m,n\}:匹配其前面的字符至少m次;至多n次;

\{0,n\}:至多n次;

\{m,\}:至少m次;

位置锚定;用来控制匹配字符串的位置

^:行首锚定;用于匹配模式的最左侧;
$:行尾锚定;用于匹配模式的最右侧

两者结合就表示锚定的是空白行

^$:空白行

^[[:space:]]*$:空白行或者包含了空白行的字符

我们这里也可以使用\<PATTERN\>来匹配完整的单词

需要强调的是我们这里所指的单词是由非特殊字符组成的连续字符或字符串都称为单词

词首和词尾的锚定也可以使用另一种方式来锚定,这里要用到上面单词匹配的模式由转义符\加><或者b来表示;

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

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

分组及引用

如果我们需要匹配两个字符而且出现多次怎么办?这里我们就要用到分组

分组可以用括号括起来,但是括号在bash的命令行里面是有特殊含义的,所以我们这里需要用到转义符\

\(\):将一个或者多个字符捆绑在一起,当做一个整体

\(xy\)*ab

这里就表示xy这组符号要出现0次或者多次

分组括号里面的模式匹配到的内容还可以被引用,其内容会被正则表达式引擎自动记录到内部变量中;需要引用的话要用到\1,\2,\3,…..等等

\1:表示从模式左侧起,第一个左括号和与之匹配的右括号之间被模式匹配到的字符

\2:表示从模式左侧起,第二个左括号与之匹配的右括号之间被模式匹配到的字符

\3:…….

文本处理工具grep

在Linux里面所有的配置文件都是以纯文本格式来展现出来的,所以在Linux里面文本的处理是及其重要的,可以帮助我们更好的提高效率

Linux上有文本处理工具三剑客,他们各自都有着强大的文本处理能力

awk:文本报告生成器

sed:流编辑器,文本编辑工具

grep:文本过滤工具

今天主要讲grep(Global search REgular expression and print out line)

作用:文本搜索工具,根据用户指定的“模式”也就是过滤条件来对目标文件进行逐行匹配并打印匹配到的行

grep工具可以分为三类:

1.grep:支持基本的正则表达式

2.egrep:支持扩展的正则表达式

3.fgrep:不支持正则表达式

这前两个都可以加选项来表示转换为另外两个;(grep -E)=egrep ;(grep -F)=fgrep;(egrep -G,-F)

grep命令

grep:文本过滤工具
    grep  [OPTIONS]  PATTERN  [FILE...]
    grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE...]
    --color=auto:对匹配到的文本着色高亮显示
    -i:igorecase,忽略字符的大小写
    -o:仅显示匹配到的字符串本身
    -v:显示不能被模式匹配到的行
    -E:支持使用扩展正则表达式元字符
    -q:--quit,静默模式,即不输出任何信息
    -A #:显示匹配到的行后#行
    -B #:显示匹配到的行前#行
    -C #:显示匹配到的行前后各#行
    gerp默认只显示匹配到的行

egrep:支持扩展的正则表达式来实现类似于grep的文本过滤工具
    egrep [OPTIONS] PATTERN [FILE...]
    -i:
    -o:
    -v:
    -q:
    -A:
    -B:
    -C:
    -g:支持基本正则表达式

fgrep:不支持正则表达式元字符
    当不需要用到正则表达式字符编写模式的时候,使用fgrep能更好

文本查看及处理工具

wc:文本统计
    wc  [OPTION]...  [FILE]...
    -l:lines;统计有多少行
    -w:words;统计有多少单词
    -c:bytes;统计有多少字节

cut:以某个字符段来切割显示文件内容
    cut OPTION... [FILE]...
    -d CHAR:以指定的字符为分隔符;
    -f FILEDS:要挑选出的字符串 
        \#:指定的单个字符;
        \#-\#:连续的多个字段;
        \#,\#:离散的多个字段;

sort:对文本进行排序并输出
    sort  [OPTION]...  [FILE]...
    -n:基于数值大小而非字符进行排序;
    -t CHAR:指定分隔符
    -k \#:用于排序比较的字段;
    -r:逆序排列;
    -f:忽略字符大小写;
    -u:重复的行只保留一份

uniq:报告或者移除重复的行
    uniq [OPTION]... [INPUT [OUTPUT]]
    -c:显示每行的重复次数
    -u:仅显示没有重复的行
    -d:仅显示重复过的行

duff:逐行进行比较文件
    diff [OPTION]... FILES

练习

新建文件lovers.txt;匹配以l开头中间有两个任意字符并以e结尾的字符串后面可以为任意长度的任意字符的行看那个匹配

        He loves his lover.
        He likes his lover.
        She likes her liker.
        She loves her liker.

grep “\(l..e\).*” lovers.txt

练习:

1、显示/etc/passwd文件中不以/bin/bash结尾的行;

grep -v "\(/bin/bash\)$" /etc/passwd

2、找出/etc/passwd文件中的两位数或三位数;

grep "\<[0-9]\{2,3\}\>" /etc/passwd

3.找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行;

grep "^[[:space:]]\+[^[space:]]" /etc/grub2.cfg

4.找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行;

netstat -tan | grep "\<LISTEN\>[[:space:]]*"

原创文章,作者:N24-执念,如若转载,请注明出处:http://www.178linux.com/64285

赞 (0)
N24-执念N24-执念
上一篇 2016-12-20 15:03
下一篇 2016-12-20 16:55

相关推荐

  • 马哥教育21期网络班—第一周课程+练习

    计算机的组成及功能 根据冯·诺依曼原理 现在计算机有五部分组成 分别是:运算器、控制器、存储器、输入设备和输出设备 现在把运算器和控制器做到一块就是所谓的CPU CPU = 运算器+控制器 存储器:memory 用于存储信息的记忆设备,存储器分为ROM和RAM 编址存储设备 ROM:只读存储器,寻址地址空间的组成部分 RAM:随机存储器 输入和输出设备: 输…

    Linux干货 2016-06-26
  • TCP连接的状态详解以及故障排查

    我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。(总结网络上的内容) 1、TCP状态 linux查看tcp的状态命令: 1)、netstat -nat  查看TCP各个状态的数量 2)、lsof  -i:port  可以检测到打开套接字的状况 3)、 &nbs…

    Linux干货 2015-04-03
  • Linux发展史

    一、从 Unix 到 Linux 这一段历史         早在 Linux 出现之前的二十年 ( 大约在 1970 年代 , 就有一个相当稳定而成熟的操作系统存在了!那就是 Linux 的老大哥『 Unix 』是也!怎么这么说呢?!他们这两个家伙有什么关系呀?这里就给他说一说啰!众所皆知的,Linux 的核心是由 …

    Linux干货 2016-10-14
  • SDCC 2017互联网运维开发实战峰会上海站

    3月17日-19日,由CSDN重磅打造的互联网运维开发实战峰会、数据库核心技术与应用实战峰会和互联网应用 架构实战峰会将在上海举行。 作为SDCC 2017(中国软件开发者大会)系列技术峰会的一部分,秉承干货实料(案例)的内容原则。 这三场峰会将邀请业内顶尖的架构师和技术专家,共同探讨运维工具研发与实践、运维自动化系统的构建、大数据与运维…

    Linux干货 2017-02-11
  • shell简单脚本

    Shell小脚本     一.       一. 简介 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系…

    Linux干货 2017-08-06
  • 数据结构应用详解-

    概述 最小生成树——无向连通图的所有生成树中有一棵边的权值总和最小的生成树 拓扑排序 ——由偏序定义得到拓扑有序的操作便是拓扑排序。建立模型是AOV网 关键路径——在AOE-网中有些活动可以并行地进行,所以完成工程的最短时间是从开始点到完成点的最长路径的长度,路径长度最长的路径叫做关键路径(Critical Path)。 最短路径——最短路径问题是…

    Linux干货 2015-04-07