Linux文本处理三剑客之一grep

        终于又到了一周一篇博客的日子

在这学习已经三周了,慢慢养成了写博客的好习惯,也慢慢的懂得了怎么写博客。这周给我印象最深刻的就是正则表达式,原本打算要写前几天所学的内容,但是昨天学到正则表达式让我有点懵,所以我今天会用一天的时间去给大家详细讲解正则表达式,争取让那些和我一样困解的人能够豁然开朗,也正是因为正则表达式才激起了我学习的劲头。

一、grep 文本过滤工具(截取关键字的那一行)

      grep root /etc/passwd

      grep “$USER”  /etc/passwd

      Linux文本处理三剑客之一grep

      – -color=auto 将匹配的结果着色显示 (centos6里面在alias加入alias grep=’grep – -color=auto’就可以,centos7默认有)

  -v 反向匹配    显示除了你输入的关键字

      -i 忽略大小写

      -n 显示的结果前增加行号

      -c 仅显示匹配到结果的行数

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

      -q 静默模式,不输出任何信息  (脚本里面用的多) echo $?可以查看出入的结果正确还是错误              或者 &> /dev/null

      Linux文本处理三剑客之一grep

-A# 显示搜索关键字的后几行

-B# 显示搜素关键字的前几行

例子:nmap -v -sP 172.17.252.0/24 |grep -B1 “Host is up”|grep for |cut -d” ” -f5 |wc -l       查看当前哪些主机在运行

-C# 显示关键字向前#行,当前行,及向后#行

      Linux文本处理三剑客之一grep

-e 关键字1 -e 关键字2  显示关键字1和关键字2的行

-w 匹配整个单词

      Linux文本处理三剑客之一grep 

-E 使用扩展正则表达式 或egrep

-F 不使用正则表达式 或 fgrep 

二、正则表达式(是由一类特殊字符以及文本字符所编写的模式,其中有些元字符不表示字面意思,而表示控制或通配的功能)

元字符分类:(1)字符匹配

                   (2)匹配次数

                   (3)位置锚定

                   (4)分组

(1)字符匹配

        . 匹配任意单个字符

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

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

      Linux文本处理三剑客之一grep

      [:alnum:] 或 [0-9a-zA-Z]

      [:alpha:] 或 [a-zA-Z]  

      [:upper:] 或 [A-Z]

      [:lower:] 或 [a-z]

      [:blank:] 空白字符(空格和制表符)

      [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)

      [:cntrl:] 不可打印的控制字符(退格、删除、警铃…)

      [:digit:] 十进制数字 或[0-9]

      [:xdigit:]十六进制数字

      [:graph:] 可打印的非空白字符

      [:print:] 可打印字符

      [:punct:] 标点符号

     (2)匹配次数(用在指定次数的字符后面,用于指定前面的字符要出现的次数)

*    表示匹配前面字符任意次,包括0或者无限次

.*   表示所有,任意长度的任意字符

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

\+   匹配其前面的字符至少1次     (需要用’’引起来)

     Linux文本处理三剑客之一grep

       \{n\}   匹配前面的字符n次

       \{m,n\} 匹配前面的字符至少m次,至多n次  (重复至少m次最多n次)

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

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

     Linux文本处理三剑客之一grep

(3)位置锚定(定位出现的位置)

    ^   以后面内容为首

    $   以前面内容为尾

    ^$  表示空行

    \< (开始符) 或 \b 词首锚定,开始与关键词

    \> (结束符)或 \b 词尾锚定;结束于关键词

     Linux文本处理三剑客之一grep

           \<PATTERN\> 匹配整个单词,或者字段

(4)分组

    \(\)将一个字符或者多个字符捆绑在一起 进行搜索

    \(a\).*\1  表示一行以a开头的关键字,中间是任何内容,再以a结束的关键字

     Linux文本处理三剑客之一grep

           \| 表示或   与 grep -e  一样

           cat /etc/httpd/conf/httpd.conf |grep -ve “^$” -e “^#”

           cat /etc/httpd/conf/httpd.conf |grep -v “^$\|^#”     (centos6中)大家可以试一下,因为太长没有办法截图

三、练习(针对以上内容做几道练习题巩固巩固)

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

      Linux文本处理三剑客之一grep

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

      Linux文本处理三剑客之一grep

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

      Linux文本处理三剑客之一grep

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

      Linux文本处理三剑客之一grep

(注释:如果不加\< \>的话多位也会显示)

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

      Linux文本处理三剑客之一grep

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行

      Linux文本处理三剑客之一grep

7、显示CentOS7上所有系统用户的用户名和UID 

      Linux文本处理三剑客之一grep 

如果不加最后面 grep -v root  则root也会别列出在内,因为系统用户是1-999

8、添加用户bash、testbash、basher、sh、nologin(其shell 为/sbin/nologin),找出/etc/passwd用户名同shell名的行 

      Linux文本处理三剑客之一grep

四、egrep    =grep -E

扩展正则表达式与正则表达式不同地方为有些地方可以省略\ 但是与grep需要加\相同的地方是:\<, \b :语首     \>, \b :语尾   后向引用:\1, \2

   

五、练习(针对egrep)

1、 显示三个用户root、mage、wang的UID和默认shell

      Linux文本处理三剑客之一grep

2、使用egrep取出/etc/rc.d/init.d/functions中其基名 

      Linux文本处理三剑客之一grep

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

     Linux文本处理三剑客之一grep

echo {0..255}|egrep -o “\<[0-9]{3}\>” |egrep -o “^1[0-9]{2}”   或者echo {0..255} |egrep -o “\<[0-9]{3}\>” |egrep “^1”                  显示100~199

echo {0..255} |egrep -o “\<[0-9]{3}\>” |egrep “^2[0-4]{1}”  显示200~249

      Linux文本处理三剑客之一grep

以上就是我对文本处理三剑客之一grep的简单理解,希望能够帮住到大家。

我想再强调一点就是写博客是个记忆深刻的很好的方法,希望大家能够坚持下去!


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

(0)
In summerIn summer
上一篇 2017-07-29 17:03
下一篇 2017-07-29 17:27

相关推荐

  • LVM练习题

    创建一个至少有两个PV组成的大小为20G的名为testvg的 VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻 辑卷testlv;挂载至/users目录 第一步!首先准备足够大的硬盘来实验 [root@Cloud /]#lsblk  #添加了/dev/sdb/c硬盘  NAME  &n…

    Linux干货 2017-08-26
  • Linux Yum源的安装配置​‍

    Linux Yum源的安装配置     一、基本概念   Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及SUSE、CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包…

    Linux干货 2015-05-11
  • 安装命令及源码安装

    rpm命令  –q:查询 -qa:查询系统内所有已安装的包 -qf:查询文件来自于那个安装包 -ql:安装包内的文件 -qp:与其他命令配合可以查询未安装包的信息,但要跟完整的安装包名 -qi:查看报的详细信息 -qc:查询程序的配置文件 -qd:查询程序的文档 -qR:查询安装包依赖的程序 –scripts:查看安装包内的脚本 -q …

    Linux干货 2016-08-26
  • Linux用户、组、权限管理

    Linux用户与组管理 Linux系统上,用户通过内核拷贝程序到内存中,从此发起进程。进程以发起者的身份进行,进程对文件的访问权限,取决于发起进程的用户的权限。而有些后台进程或服务类进程以非管理员身份运行,为此也需要创建多个普通用户,此类用户不需登录。 系统中,用户类别分为管理员和普通用户(系统用户和登录用户),组类别分为基本组和附加组。管理系统上的用户与组…

    Linux干货 2016-12-07
  • while until 循环用法和 case 条件base编程

    写一个脚本: (1)能接受四个参数:start、stop、restart、status 输入start输出starting,脚本名为finished (2)其它任意参数均报错退出 #!bin/bash #author:jian #date:2017-11-12 #discription: read -p “please input a strin…

    Linux干货 2017-11-14
  • Linux进程查看及管理(2)

    Linux进程查看及管理(2) CentOS5和6的启动流程: Liunx中的启动:kernel和rootfs(根文件系统) kernel:进程管理,内存管理,网络管理功能,驱动程序,文件系统,安全功能(权限模型), rootfs:glibc(lib,lib64) 库:函数集合,function(功能模块)有其调用接口(头文件是对函数功能或调用参数的功能进行…

    Linux干货 2016-08-08