grep的使用以及正则表达式

正则表达式以及grep的使用

grep是一种文本过滤工具(模式:pattern)基本使用用法如下:

grep  [option] PATTERN  FILE          
 grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
      --colour=auto:对匹配到的文本着色
      -i:ignorecase 忽略字符大小写
      -o:仅显示匹配到的字符串本身
      -v:反向显示
      -E:支持扩展的正则表达式
      -q:静默模式 不输出任何信息
      -A#:after 后#行
      -B#:before 前#行
      -C#:context 前后#行

基本正则表达式的元字符:


               字符匹配:
                     . :任意单个字符
                    []:匹配指定范围内的任意单个字符
                    [^]:匹配指定范围外的任意单个字符
            匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数
                    *:匹配其前面的字符任意此;0,1,多次
                   .*:匹配任意长度的任意字符           
                   \?: 匹配前面的字符0次或1次,即其前面的字符可有可无
                   \+: 匹配前面的字符1次或多次,即前面的字符至少出现1次
                  \{m\}:匹配前面的字符m次
                  \{m,n\}匹配前面的字符至少m次,最多n次
                        \{0,n}:最多n次
                        \{m,\}:至少m次
            位置锚定
                    ^:行首锚定:用于模式的最左侧
                   $:行尾锚定;用于模式最右侧
                   ^PATTERN$:用于PATTERN来匹配整行
                   ^$:空白行
                   ^[[:space:]]*$:空白行货包含空白字符的行
                  单词:非特殊字符组成的连续字符串都称为单词
                   \< 或\b:词首锚定 用于单词模式的左侧 
                   \>或\b:词尾锚定,用于单词模式的右侧
                   \<PATTERN\>:匹配完整单词
            分组及引用
                   \(\):将一个或多个字符捆绑在一起,当作一个整体处理
                             例如:\(xy\)*ab
          分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为
               \1:模式从左侧起,第一个左括号以及与之匹配的右括号之前的模式所匹配到的字符
               \2:模式从左侧起,第二个左括号以及与之匹配的右括号之前的模式所匹配到的字符
               \3:
       后项引用:应用前面的分组括号中的模式所匹配到的字符

扩展正则表达式

       字符匹配:
              .:匹配任意单个字符
              []:指定范围内的任意单个字符 
           [^]:匹配指定范围外的任意单个字符
        次数匹配
                *:任意次,0,1或多次
               ?:0次或1次,其前字符可有可无
                +:其前字符至少1次
              {m}:其前字符至少m次
              {m,n}:其前的字符m次
        位置锚定
               ^:行首锚定
               $:词尾锚定
               \< 或\b:词首锚定 用于单词模式的左侧 
               \>或\b:词尾锚定,用于单词模式的右侧
               \<PATTERN\>:匹配完整单词  
        分组及引用:
             ():分组,括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中
              后向引用:\1, \2
        或: a|b: a或者b

练习:

1 取出ifconfig命令中的ip地址
[root@Linuxprobe ~]# ifconfig | egrep  -o "([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-4]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-5]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-5]|25[0-5])"
10.127.69.19
255.255.255.0
10.127.69.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255
[root@Linuxprobe ~]# ifconfig | egrep -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" 稍微简洁写的写法
10.127.69.19
255.255.255.0
10.127.69.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255
[root@Linuxprobe ~]# ifconfig | egrep -o "(([0-9]{1,3})\.){3}[0-9]{1,3}"再次进行精简
10.127.69.19
255.255.255.0
10.127.69.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255

2 找出/etc/passwd中用户名与默认shell同名的的行  
 [root@Linuxprobe ~]# cat /etc/passwd | grep -E "^([[:alnum:]]+\>).*\1$"
 sync:x:5:0:sync:/sbin:/bin/sync
 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
 halt:x:7:0:halt:/sbin:/sbin/halt
 bash:x:1002:1002::/home/bash:/bin/bash
 nologin:x:1003:1003::/home/nologin:/bin/nologin

3 取出一个文件的基名和路径名
[root@Linuxprobe ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep -o "[^/]+$" 取一个文件的基本
ifcfg-ens33
[root@Linuxprobe ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep  "^/.*/" -o 取出路径名
/etc/sysconfig/network-scripts/

4 取出/etc/rc.d/functions文件某个单词后面跟一个小括号的行
 [root@Linuxprobe ~]# egrep "[[:alnum:]]+\>\(\)+" /etc/rc.d/init.d/functions -o
checkpid()
checkpids()
kill()
.....

5 用两种方法显示/proc/meminfoz中大写或小写S开头的行
[root@Linuxprobe backups]# grep "^[sS].*" /proc/meminfo 
SwapCached:87404 kB
SwapTotal:   2097148 kB
SwapFree:1929492 kB
Shmem:  8332 kB
Slab: 189808 kB
SReclaimable: 118840 kB
SUnreclaim:70968 kB
[root@Linuxprobe backups]# grep -E "^(s|S).*" /proc/meminfo 
SwapCached:87400 kB
SwapTotal:   2097148 kB
SwapFree:1929496 kB
Shmem:  8336 kB
Slab: 189808 kB
SReclaimable: 118840 kB
SUnreclaim:70968 kB
6 取出/etc/paswwd文件中默认shell为非/sbin/nogloin
[root@Linuxprobe backups]# grep -v "nologin\>$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
harrycai:x:1000:1000:harry.cai:/home/harrycai:/bin/bash
.............................................
7 取出/etc/paswwd文件中默认shell为/bin/bash的用户
[root@Linuxprobe backups]# grep  "bash\>$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
harrycai:x:1000:1000:harry.cai:/home/harrycai:/bin/bash
student:x:1001:1001::/home/student:/bin/bash
bash:x:1002:1002::/home/bash:/bin/bash
user1:x:1004:1004::/home/user1:/bin/bash
.............................................

8 找出/etc/passwd 文件中的一位数或两位数
[root@Linuxprobe backups]# grep -E  "\<[0-9]{1,2}\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
.............................................

9 显示/boot/grub/grub.conf中至少一个空白字符开头的行
[root@Linuxprobe backups]# grep -E "^[[:space:]]+" /boot/grub2/grub.cfg 
10 显示/etc/rc.d/network文件中以#开头局,后面至少一个空白字符,而后又至少一个非空白字符行
[root@Linuxprobe backups]# grep -E "^#[[:space:]]+[^[:space:]]+" /etc/rc.d/init.d/network 
# network   Bring up/down networking
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to \
.......................

11 打出netstat -tan命令执行结果以“LISTEN”,后面跟空白字符的行
[root@Linuxprobe backups]# netstat -tan | grep -E "LISTEN\>[[:space:]]+"
tcp0  0 0.0.0.0:111 0.0.0.0:*   LISTEN 
tcp0  0 192.168.122.1:530.0.0.0:*   LISTEN   
............................................

12 匹配出所有的邮件地址
[root@Linuxprobe ~]# cat mailtest | grep -E "\<[[:alnum:]]*@[[:alnum:]]*[[:punct:]]*[[:alnum:]]*\.[a-z]+\>" 
noc@google.com
noc@telstra-pbs.cn
noc@pacnet.com.cn
414804000@qq.com
jzssysjzzyxgs@3158.com 
sales@wiremesh-machine.cn 
1305480186@qq.com 
.............

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

(0)
N27_CaiShuangN27_CaiShuang
上一篇 2017-08-21
下一篇 2017-08-21

相关推荐

  • Linux基础知识之根下各目录的介绍

    /bin  :所有用户使用的基本用户命令文件,二进制格式的 /sbin :供系统管理使用的工具程序 /boot :引导加载器必须用到的各静态文件:kernel initramfs(initrd),grub /dev  :存储特殊文件或设备文件;设备的类型:字符设备,块设备; /etc  :系统程序的静态配置文件,只能为静态的不能…

    Linux干货 2016-07-10
  • find文件:就是这么简单

    概述 由于Linux一切皆文件,我们的日常运维工作其实就是与文件打交道的事,如何能够快速而有效地找到我们需要的文件呢?这是个令人头疼的问题。幸运是,Linux为用户提供了强大的查找工具——find。find通过遍历指定路径完成文件查找,它的的工作特点: 精确查找——多查询条件组合,精确匹配; 实时查找——遍历指定路径; 查找速度稍慢——由于需要遍历路径,速度…

    Linux干货 2016-08-18
  • 作业管理

    作业管理 ·Linux的作业控制:          前台作业:通过终端启动,且启动后一直占据终端;          后台作业:可通过终端启动,但启动后即转入后台运行(释放终端) ·如何让作业运行于…

    Linux干货 2016-09-11
  • 文本查看、处理工具的应用及组、用户的相关操作

            一、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可      查看已经登录的用户用“who”命令,为了试验我用root多登录了几次。    &nb…

    2017-07-16
  • Linux系统基础命令

    Linux下一些基本常用命令:   1、Lscpu:显示CPU架构详细信息; [root@centos6 ~]#lscpu 2、Cat:查看合并文件到标准输出; [root@centos6 ~]#cat file    Tac:显示的文本与cat显示的文本相反; 3、Who:显示都有那些用户登录到了系统; [root@…

    Linux干货 2016-07-26
  • Linux的常用的计划任务(一次任务与周期性任务) at & cron

      在Linux日常维护工作中,维护员不可能每时每刻都守在服务前前,但如果遇到例行的操作要进行怎么办?设定计划任务!     Linux任务计划、周期性任务执行     • 未来的某时间点执行一次任务:      &n…

    Linux干货 2016-09-09