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)
上一篇 2016-08-15 09:26
下一篇 2016-08-15 09:26

相关推荐

  • 千里眼–用NFS和Samba实现共享网页文件

     目的:使用网络文件系实现LAMP的分步式资源共享 配置过程– 搭建nfs服务器:(centos 6.8) 安装yum install mysql-server nfs-utils httpd #这里安装httpd是为了方便后面共享文件的属主属组定义 启动nfs服务 #service nfs start  mkdir /dat…

    2017-04-30
  • Nginx+Apache+Tomcat实现LANMT动静分离

    Nginx+Apache+Tomcat实现LANMT动静分离          目的:    本次实验主要目的为实现以Nginx作为反向代理,并实现分别访问动静态服务的效果。   拓扑结构:     &nbsp…

    Linux干货 2016-12-05
  • shell脚本实现MD5破解的相关小计

    分享编写shell脚本暴力破解md5的方法 方法一 单个破解法(以10位数为例) #!/bin/bash read -p “please input strings:”string for n in {0..33000} do Md5=`echo $n |md5sum|cut -c 1-10`      …

    Linux干货 2017-03-26
  • N28-第四周:正则表达式练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。
    2、编辑/etc/group文件,添加组hadoop。
    3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。
    4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。
    5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。
    6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;
    7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
    8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
    9、找出/etc/passwd文件中的一位数或两位数;
    10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
    11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
    12、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;
    13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

    2017-12-24
  • Ansible(From Wikipedia)

           Ansible 是一个免费的用于配置和管理计算机的的软件平台。它集成了软件部署,ad hoc任务执行,和管理配置的功能。它依赖Python2.4之后的版本和通过SSH或者PowerShell管理节点。模块工作在JSON格式,输出信息可以被任何编程语言再次编写。系统管理员可以使用YAML…

    Linux干货 2015-11-18
  • HAproxy簡單配置

    用途:TCP/HTTP反向代理,四层负载均衡,适合高可用环境。Linux6.4版本后haproxy已随base仓库收录进来。文档:http://cbonte.github.io/haproxy-dconv/主程序:/usr/sbin/haproxy 主配置文件:/etc/haproxy/haproxy.cfg启动文件:/usr/lib/systemd/sys…

    2017-05-17