Linux文本处理三剑客之grep

一、grep命令

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。

模式:由正则表达式字符及文本字符所编写的过滤条件


二、grep命令格式

grep [OPTIONS]  PATTERN  [FILE…]

grep root /etc/passwd

 1.png

grep "$USER" /etc/passwd(变量)

2.png

grep '$USER' /etc/passwd

3.png

grep `whoami` /etc/passwd(命令替换)

4.png

三、grep命令选项

–color=auto:对匹配到的文本着色显示

alias grep='grep –color=auto'在centos7中默认是着色显示的

-v:显示不能够被模式匹配到的行,其实就是取反的意思

匹配除root用户以外的其他用户信息

5.png

-i:忽略字符大小写

不管是小写字母还是大写字母都能匹配

6.png

-n:显示匹配的行号

显示出匹配到信息行号,方便查看它的位置

7.png

-c:统计字符的行数

匹配到的信息总共有多少行

8.png

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

把所有匹配到的root字符串显示出来

9.png

-q:静默模式,不输出任何信息

只关心命令执行与否,不再终端上显示信息,可以用echo $?判断

10.png

11.png

    -A#:after,后#行 

显示匹配到的并且显示匹配到的后三行

12.png

    -B#:before,前#行

显示匹配到的并且显示匹配到的前三行

13.png

-C:context,前后各#行

显示匹配到的信息前后各两行

14.png

-e:实现多个选项间的逻辑or关系(默认是或者的关系)

grep –e ‘cat ’ -e ‘dog’ file

把带有root和baah关键字的信息显示出来

15.png

-w:整行匹配整个单词

16.png

-E:使用ERE

这个选项就是egrep,往回看有详细解释

四、正则表达式详解

1、REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

2、程序支持:grep, vim, less,nginx等

3、分两类:

    基本正则表达式:BRE

    扩展正则表达式:ERE

                    grep -E, egrep

4、正则表达式引擎:

      采用不同算法,检查处理正则表达式的软件模块

    PCRE(Perl Compatible Regular Expressions)

5、元字符分类:字符匹配、匹配次数、位置锚定、分组

6、可以使用man 7 regex查看


五、基本正则表达式之字符匹配

. :匹配任意单个字符;

匹配以r开头以t结尾中间任意两个字符

17.png

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

匹配以r开头以t结尾中间a-z之间任意单个字符的单词

18.png

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

匹配以r开头以t结尾中间除了b-z之外任意单个字符的单词

19.png

[:digit:]:表示所有数字

[:lower:]:表示所有小写字母

[:upper:]:表示所以大写字母

[:alpha:]:表示所有字母,包括大小写

[:alnum:]:表示所以字母和数字

[:punct:]:表示所有标点符号

[:space:]:表示空格和tab


六、基本正则表达式之匹配次数

用在要指定的额字符后面,用于指定前面字符要出现的次数

 *:匹配前面的字符任意次,包括0次

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

\?:匹配其前面的字符0或1次

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

\{m\}:匹配前面的字符m次

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

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

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

七、基本正则表达式之位置锚定

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

表达以root开头的行

4.png

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

表达以bash结尾的行

5.png

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

    ^$:空行

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

删除空白行

6.png

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

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

\<PATTERN\>:匹配整个单词


八、基本正则表达式之分组

将一个或者多个字符捆绑在一起,当作一个整体进行处理

如:\(root\)\+ 表示root重复一次以上

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部变量中,这些变量的命令方式为:\1,\2,\3,…

\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;

后向引用:引用前面的分组括号中模式所匹配字符(而并非模式本身)

7.png


九、练习:

1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)

8.png

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

9.png

3、显示用户rpc默认的shell程序

10.png

4、找出/etc/passwd中的两位或三位数

11.png

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

12.png

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

13.png

7、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名的行

14.png

8、显示Ip地址

15.png


十、egrep及扩展的正则表达式

egrep= grep -E

egrep[OPTIONS] PATTERN [FILE…]

扩展正则表达式就是grep -E,但是他们表达的方式使用有些不同

十一、egrep正则表达式之字符匹配

. 任意单个字符

[] 指定范围的字符

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

字符匹配和grep的用法相同


十二、egrep正则表达式之次数匹配

*:匹配前面字符任意次

?: 0或1次

+:1次或多次

{m}:匹配m次

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

可以看出egrep正则表达式的次数匹配表达方式比grep少了"\"

十三、egrep正则表达式之位置锚定

^:行首

$ :行尾

\<, \b :语首

\>, \b :语尾

位置矛锚定和grep表达方式一样

十四、egrep正则表达式之分组表达

()

后向引用:\1,\2,…

分组表达方式比grep少了"\"


十五、egrep正则表达式之或者方式表达

a|b

C|cat: C或cat

(C|c)at:Cat或cat


十六、egrep的练习

1、显示当前系统root、mage或wang用户的UID和默认shell

16.png

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

    需要注意的是扩展正则表达式中()表示的是分组的意思,所以需要加上转义字符

17.png

18.png

3、使用egrep取出/etc/rc.d/init.d/functions中其基名(basename)

19.png

4、使用egrep取出上面路径的目录名

20.png

5、统计以root身份登录的每个远程主机IP地址的登录次数

21.png

6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255

[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]25[0-5]

7、显示ifconfig命令结果中所有IPv4地址

22.png

8、正则表达式表示身份证号

1.png

9、正则表达式表示手机号

   echo "18883797175" | grep -E -o "\<1[3578][0-9]{9}\>"

  10、正则表达式表示邮箱

  egrep "\<([[:alnum:]]+|_)*@([[:alnum:]]+\.)+[[:alnum:]]+" sid.txt

  11、正则表达式表示QQ号

  grep –E –o “\<[1-9][0-9]{4,12}\>”



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

(0)
xiaoqingxiaoqing
上一篇 2016-08-15 09:26
下一篇 2016-08-15 09:26

相关推荐

  • Linux文件系统管理

    一、什么是文件系统     我理解的文件系统就是管理磁盘分区上数据的索引信息,其实文件系统就是一种应用程序,只不过是用来维护和管理分区上的数据而已,就跟操作系统是用来管理底层硬件一样。不同的分区可以有不同的文件系统。 二、文件系统类型     在linux系统上主要有如下类型的文件系统: &nbsp…

    Linux干货 2016-03-03
  • 10.脚本练习2

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) POST –> Boot Sequence(BIOS) –> Boot Loader(MBR)   –> Kernel+ramdisk(initrd) –> rootfs –> /sbin/init   –> (/etc/inittab…

    2017-09-20
  • N25_第十二周作业

    1、请描述一次完整的http请求处理过程;     1)建立或者处理连接:建立请求或拒绝请求     2)接收请求:接收来自于网络上的主机请求报文中对特定资源的一次请求的过程;     3)处理请求:对请求报文进行解析,主要获取客户端请求的…

    Linux干货 2017-03-06
  • RAID与逻辑卷

        RAID与逻辑卷作为磁盘管理的方式,各有各的优势。RAID是多个磁盘合成一个阵列,以便提供更好的性能;逻辑卷相对于分区来说,可以在线扩展空间,也可以缩减空间。可以利用软件的方式来实现RAID与逻辑卷。 一、利用软件方式实现RAID     利用sdb sdc sdd sd…

    2017-08-12
  • Linux磁盘阵列RAID以及mdadm实现软件RAID

    一、概要 RAID(磁盘阵列):由众多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果来提升整个磁盘的性能。 二、RAID的级别及其优缺点 读性能提升 写性能提升 容错能力 组合后空间大小 RAID0 上升 上升 无 n*单个磁盘大小 RAID1 上升 下降 有(最多坏一块磁盘) 1*单个磁盘大小 RAID4 上升 上升 有(…

    2015-04-20
  • n22-第一次作业-对Linux基础知识的回顾

    1、描述计算机的组成及其功能   根据冯诺依曼计算机体系结构模型,计算机由运算器、控制器、存储器、输入设备、输出设备五大部分组成。如上图:    运算器主要由算数逻辑单元ALU和通用寄存器组成,主要用于完成算术运算和逻辑运算。      控制器是整个计算机的控制中心,它的主要功能是周而复始…

    Linux干货 2016-08-15