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
下一篇 2016-08-15

相关推荐

  • 【盘点】2017年9-11月运维大会(时间+地点)

    到底未来的运维模式是什么?如今运维人员面临着怎样的转变? 活动家为您精心挑选整理了9-11月七场运维大会希望本文能帮您! CNUTCon 全球运维技术大会2017 大会简介: CNUTCon全球运维技术大会是由InfoQ主办的运维&容器技术盛会。大会为期2天,主要面向各行业对运维&容器技术感兴趣的中高端技术人员。秉承着“同步前沿技术、共享实战…

    2017-08-31
  • 文本处理工具补充之sed命令

    sed:stream editor,行编辑器         sed命令工作原理:它在处理数据时,每次只处理一行,首先把当前处理的行存储在临时缓冲区中,我们称这个缓冲区称为“”模式空间“,接着用sed命令处理缓冲区中的内容,处理完后,把缓冲区中的内容送到屏幕上显示出来,接着去处理…

    Linux干货 2016-08-11
  • iptables 补充本

    浅谈iptables一 什么是iptablesiptables 是工作在内核之上的netfilter框架的前端工具(iptables是netfilter的管理工具这样说也不为过)Firewall:隔离工具,工作于主机或网络的边缘处,对经由的报文根据预先定义的规则(识别标准)进行检测,对于能够被规则匹配到的报文实行某种预定义的处理机制的一套组件; 硬…

    Linux干货 2017-05-15
  • Android必备的Java知识点

     Android应用程序开发是以Java语言为基础的,所以需要有扎实的Java基础知识。首先熟悉java基本语法,然后熟悉设计模式等。         a) Java基础语法:看下面的《Java知识点列表》       b)设计模式:由于在Android系统的框架层当中,使用了大…

    Linux干货 2015-04-08
  • Linux文件查找之find命令

    前言:        Linux文件种类繁多,难免在维护Linux中会忘记文件的路径。所有在维护Linux中学好查找命令是非常必要的。     Linux查找命令有很多,比如 whereis,type,which,locate,find(重点)。  &nbsp…

    Linux干货 2015-06-15
  • 学习宣言

    没有学不会的技术,只有不勤奋的人!

    Linux干货 2016-12-28