首页 > 其他 > 详细

grep与正则表达式

时间:2014-02-20 13:08:40      阅读:405      评论:0      收藏:0      [点我收藏+]

what, why, when, who, where, how


一、grep简介

     grep是一种强大的文本搜索工具,他能够根据用户指定的文本模式对目标文件进行逐行搜索,显示能够被模式所匹配到的行当我们要从一个文档中找我们需要的信息的时候,grep就被派上了用场。

grep可用于shell脚本的书写,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。


二、grep选项

      grep [OPTIONS] PATTERN [FILE...]

      grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]


                    -a 以文本文件方式搜索

                   -c 计算找到的符合行的次数

                   -i 忽略大小写

                   -n 顺便输出行号

                   -v 反向选择,即找 没有搜索字符串的行

                               -o 仅显示被模式匹配到的字符串,非整行

                               -E 支持扩展的正则表达式

--color=auto 将匹配到的内容加颜色


三、grep正则表达式


        正则表达式是一类字符所书写出的模式(pattern),分为基本正则表达式和扩展正则表达式。而元字符即为模式中那些不表示字符本身的意义,用于额外功能性的描述的字符。

     2.1、  基本正则表式的元字符:

           2.1.1 、字符匹配:用来指定匹配到的字符

                     .                       : 任意单个字符

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

               [0-9], [[:digit:]]    :匹配数字

               [a-z], [[:lower:]]   :匹配所有小写字母

               [A-Z], [[:upper:]] :匹配所有大写字母

               [[:alpha:]]           :匹配所有字符

               [[:alnum:]]          :匹配所有数字和字母

               [[:space:]]          :匹配空格

               [[:punct:]]           :匹配所以标点符号

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

          2.1.2、次数匹配:用来指定匹配其前面的字符的次数

               *                         : 匹配前面的字符任意次

               .*                        : 匹配任意长度的任意字符

               \?                       : 0次或1次

               \{m\}                   :匹配m次

               \{m,n\}                :至少m次,之多n次

               \{m,\}                  : 至少m次;

               \{0,n\}                 :至多n次;

        2.1.3、位置锚定:用于指定字符出现的位置

                     \<                      :锚定词首

                 >\                      :锚定词尾

               ^Char                 :锚定行首

                    Char$:               :锚定行尾

                ^$:                     :空白行

        2.1.2、分组;讲模式匹配到的字符进行分组用于后向引用。

           \(\)

           \(ab\)*xy

           引用:

           \1: 后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容

           \2:向后引用,引用前面的第二个左括号以及与之对应的右括号中的模式所匹配到的内容

           ...

                  例如: \(a.b\)xy\1: a6bxya6b,

     2.2、  扩展正则表式的元字符:

                      扩展正则表达式跟基本差不多,只是多了”+“,”|“,两个元字符。而且扩展正则中除了词首词尾锚定时使用“\"外,其余的元字符不用像基本正则一样加“\”号

                      +: 匹配其前面的字符至少1次

                      |: 或者, abc|de

                                    匹配“|”两侧的字符“abc”或“de”,如果仅仅匹配”abce“或“abde”应该用分组“()“将其引用,形如ab(c|d)e”。




一、用法实例

      grep有两种用法,一种是通过管道传递参数给grep命令来处理

        例如:

[root@station57 subsys]# ifconfig | grep -n --colour=auto "inet"
2:          inet addr:172.16.251.57  Bcast:172.16.255.255  Mask:255.255.0.0
3:          inet6 addr: fe80::20c:29ff:fe88:4f85/64 Scope:Link
11:          inet addr:127.0.0.1  Mask:255.0.0.0
12:          inet6 addr: ::1/128 Scope:Host

      用法二;

    grep 直接加文件路径

        例如;

1、显示/porc/meminfo文件中以大小写s开头的行

[root@station57 subsys]# grep "^[sS]" /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097144 kB
SwapFree:        2097144 kB
Shmem:               244 kB
Slab:              36484 kB
SReclaimable:      11576 kB
SUnreclaim:        24908 kB
[root@station57 subsys]#

2、显示/etc/rc.d/rc.sysinit文件中,以#开头,后边跟至少一个空白字符。而后又有至少一个非空白字符的行

[root@station57 subsys]# grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit
# /etc/rc.d/rc.sysinit - run once at boot time
# Taken in part from Miquel van Smoorenburg‘s bcheckrc.
# Check SELinux status
# Print a text banner.
# Only read this once.
# Initialize hardware
# Set default affinity
3、找出、


3、找出/etc/passwd 中一位数和两位数的行


[root@station57 subsys]# 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/4.


4、找出ifconfig命令中1到255之间的整数

[root@station57 subsys]# ifconfig | grep -E "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-9])\>"
eth0      Link encap:Ethernet  HWaddr 00:0C:29:88:4F:85
          inet addr:172.16.251.57  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fe88:4f85/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX bytes:8962707 (8.5 MiB)  TX bytes:1911419 (1.8 MiB)
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
ifconfig | grep -E "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-9])\>"
eth0      Link encap:Ethernet  HWaddr 00:0C:29:88:4F:85
          inet addr:172.16.251.57  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fe88:4f85/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX bytes:8962707 (8.5 MiB)  TX bytes:1911419 (1.8 MiB)
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1



本文出自 “小小笔记而已” 博客,请务必保留此出处http://xuqimin.blog.51cto.com/3832456/1360796

grep与正则表达式

原文:http://xuqimin.blog.51cto.com/3832456/1360796

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!