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

相关推荐

  • History,Help——Linux基本命令(6)

    1.     history   当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效率获得极大提升。 history是shell的内置命令,其内容在系统默认的shell的man手册中。 一些用法: history[-c] [-d offset] [n] …

    2017-07-15
  • 第十七周 作业–结合图形描述lvs原理

        LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。   Lvs有三种模式分别是lvs-nat、lvs-dr、lvs-tun。下面分别介绍lvs-nat、lvs-dr…

    Linux干货 2016-12-07
  • Javascript 装载和执行

    一两个月前在淘宝内网里看到一个优化Javascript代码的竞赛,发现有不少的人对Javascript的执行和装载的基础并不懂,所以,从那天起我就想写一篇文章,但一直耽搁了。自上篇《浏览器渲染原理简介》,正好也可以承前启后。 首先,我想说一下Javascript的装载和执行。通常来说,浏览器对于Javascript的运行有两大特性:1)载入后马上执行,2)执…

    Linux干货 2016-07-10
  • cut命令练习总结

    cut命令的作用是实现文本内容的切割,原内容或者原文件不受影响。   cut小练习:                       2016年 07月 …

    Linux干货 2016-07-22
  • grub文件文件修复

    首先我们先破坏一下grub文件 这里我们先查看一下电脑是哪块硬盘启动的 这里我们就直接破坏硬盘的二进制数据,以达到grub的破坏。 要记住我们只能破坏前446字节,也就是bootloader。后面64字节是分区表。 我们可以查看一下前512字节的二进制文件 hexdump -C -n 512 /dev/sda 先破坏/boot/grub/stage1的前44…

    2017-07-28
  • raid介绍

    raid介绍 在生产环境中,服务器所需的存储容量比较大,一般都会选择磁盘阵列来走存储。 阵列的优点 多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供 首先在I/O能力上,多个磁盘并行读写,可以提高读写的速度。 阵列所提供的磁盘冗余,提升存储设配的耐用性。 RAID实现的 外接式磁盘阵列:通过扩展卡提供适配能力 内接式RAID:主板集成RAID控…

    2017-06-24