grep是Linux系统中的一个文本流处理工具(单位为行),用于在文件中搜寻所需要的内容。grep、awk、sed被称为文本处理三剑客。
接下来我们看一下grep的使用格式及常用选项:
grep[options]PATTERN[FILE...] -v#过滤匹配到的行 -o#仅显示匹配到的字符 -i#匹配字符时候忽略大小写 -n#显示行号 -An#显示匹配到的行及上面的n行 -Bn#显示匹配到的行及下面的n行 -Cn#显示匹配到的行及上下各n行 -E#扩展的正则表达式;=egep --color=auto:匹配到的字符串显示颜色
了解了grep的使用格式和常用选项后,我们就可以是试试了:
1.复制/etc/passwd到/tmp目录; [root@localhosttmp]#cp/etc/passwd/tmp/ 2.找到包含root字符的行并将匹配到的字符串显示颜色; [root@localhosttmp]#grep--color=auto"root"/tmp/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@localhosttmp]# 3.找到除了bash字符的行并显示行号; [root@localhosttmp]#grep-vn"bash"/tmp/passwd 2:bin:x:1:1:bin:/bin:/sbin/nologin 3:daemon:x:2:2:daemon:/sbin:/sbin/nologin .....还有很多,以你的为准..... [root@localhosttmp]# 4.找到包含ntp字符的行及其上面的2行; [root@localhosttmp]#grep-B2"ntp"/tmp/passwd vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin pcap:x:77:77::/var/arpwatch:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin [root@localhosttmp]# 5.找到xfs字符的行及其上下的各1行; [root@localhosttmp]#grep-C1"xfs"/tmp/passwd nfsnobody:x:65534:65534:AnonymousNFSUser:/var/lib/nfs:/sbin/nologin xfs:x:43:43:XFontServer:/etc/X11/fs:/sbin/nologin haldaemon:x:68:68:HALdaemon:/:/sbin/nologin
好,如果没有问题的话我们继续。
grep除了能使用以上的基本选项外,还可以使用正则表达式进行更加高级的模式匹配。这个正则表达式很简单,比grep还要简单,只需要背背就能记住了!
正则表达式是由元字符组成的一种模式,可以完成更高级、更复杂的模式匹配。正则表达式分为基本的正则表达式和扩展的正则表达式,正则表达式是一个必须掌握的玩意儿,如果不会那你该脸红咯。
正则表达式的元字符并不代表其字符意义,而是另有其他意义,我们看一下都有哪些,以及这些元字符的解释:
一、基本的正则表达式 根据功能的不同,基本正则表达式的元字符大概可以分为四个个类型: 1.字符匹配: .#匹配任意单个字符 []#匹配集合内的任意单个字符 [0-9]:代表0-9 [^]#匹配集合外的任意单个字符 2.次数匹配 *#匹配前面字符任意次 \?#匹配前面字符0次或1次 .*#匹配任意字符任意次 \{m,n\}#匹配前面字符最少m次,最多n次 \{m,\}#匹配前面字符最少m次 \{0,n}#匹配前面字符最多n次 3.位置铆钉 ^#锚定行首 $#锚定行尾 ^$#锚定空白行 \<#锚定词首 \>#锚定词尾 \b#锚定词首和词尾例如:\b单词\b 4.分组及引用 \(\)#扩住字符并给后面的引用 \1#引用第一个括号中的内容 \2#引用第二个括号中的内容 二、扩展的正则表达式 #扩展的正则表达式只比正则表达式多了"{m}、+、|"而且有些地方不需要\转义 1.字符匹配: .#匹配任意单个字符 []#匹配集合内的任意单个字符 [^]#匹配集合外的任意单个字符 2.次数匹配 *#匹配前面字符任意次 ?#匹配前面字符0次或1次 .*#匹配任意字符任意次 +#匹配前面字符至少一次 {m,n}#匹配前面字符最少m次,最多n次 {0,n}#匹配前面字符最多n次 {m,}#匹配前面字符最少m次 {m}#匹配前面字符m次 3.位置铆钉 ^#锚定行首 $#锚定行尾 ^$#锚定空白行 \<#锚定词首 \>#锚定词尾 \b#锚定词首和词尾例如:\b单词\b 4.分组及引用 ()#扩住字符并给后面的引用 \1#引用第一个括号中的内容 \2#引用第二个括号中的内容 |#代表或者的意思,例如a|b代表a或者b
需要说明一下关于[]的集合: []内可以是任意字符,如果是连续的,可以用-连接,例如0到9就是[0-9]、A到Z就是[a-z],匹配的时候只匹配其内部包含的任意单个字符。除了可以自己定义内部的匹配字符外,bash事前已经提供了一些字符集合: [:upper:]#匹配任意单个大写字母; [:lower:]#匹配任意单个小写字母; [:alpha:]#匹配任意单个大小写字母; [:digit:]#匹配任意单个数字; [:space:]#匹配任意单个空格 [:punct:]#匹配任意单个标点符号 #以上的字符集合需要放到[]内,如[[:upper:]]
稍后添加使用实例。