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

相关推荐

  • 如何用SHELL写好网络爬虫

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1550976        上周,老大压下来任务,让写一个网络爬虫,负责爬某一个行业网站的数据信息。由于本人只会 sh…

    Linux干货 2016-08-15
  • iptables练习

    系统的INPUT和OUTPUT默认策略为DROP; 1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机; 系统默认策略设定: ~]# iptables -P INPUT DROP ~]# iptables -P OUPUT DROP 网络说明…

    Linux干货 2016-12-27
  • 8月4号作业

    正则表达式表示18位身份证号 egrep "\b[0-9]{17}(x|X|[0-9])\b" 正则表达式表示手机号 egrep "\b1[3,5,8,7][0-9]{9}\b" phone 正则表达式表示邮箱 grep -E "\b[[:alnum:]].*@[[:alnum:]]{2,3}.[[:alnu…

    Linux干货 2016-08-08
  • N25-第二周作业

    1、  Linux上的文件管理类命令都有那些,其常用的使用方法及其相关示例演示。 常用的管理类命令有:rm、mv、cp 1)         rm:remove rm [ OPTION ] FILE 常用选项:     &nbsp…

    Linux干货 2016-12-13
  • linux运维

    linux运维大纲,学习路线图

    Linux干货 2017-10-21
  • CentOS下获取帮助

    CentOS中获取帮助 在使用和学习CentOS系统时,我们可能会遇上不熟悉的命令,需要获取帮助。在很多情况下,我们无法通过网络获取帮助,这个时候我们就需要自己通过查看系统帮助文档来解决问题。下面就来介绍获取帮助的方法: 1、 获取简单的帮助信息:whatis COMMAND   2、获取比较详细的命令帮助信息:help COMMAND;COMMA…

    2017-07-15