grep与正则表达式
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次 {0,n} :至多n次; 2.1.3、位置锚定:用于指定字符出现的位置 &; :锚定词首 > :锚定词尾 ^Char :锚定行首 Char$: :锚定行尾 ^$: :空白行 2.1.2、分组;讲模式匹配到的字符进行分组用于后向引用。 () (ab)*xy 引用: 1: 后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容 2:向后引用,引用前面的第二个左括号以及与之对应的右括号中的模式所匹配到的内容 ... 例如: (a.b)xy1: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |