正则表达式第一关之grep
很多学linux的同学和我一样,鸟哥的私房菜里每次读到正则表达式那一章,就感觉缺乏攻破它的勇气了,如果你和我一样也是刚进入linux世界的菜鸟,不妨多总结里面的基本用法以及一些特别需要注意的地方,相信你和我一样,不妨多反复揣摩,相信你也可以熟练掌握它,所谓书读百遍其义自现。刚接触的你肯定会疑问什么是正则表达式(RegularExpression),简单的讲正则表达就是处理字符串的方法,有点像word里的查找替换,不过它可比word里的查找替换强大N倍,它是以行为单位来进行字符串处理行为,通过一些特殊符号的辅助,轻松的帮你查找、删除、替换某些特定字符串的处理程序。下面让我们一起去攻破正则表达的第一个命令grep。 本文的主要内容包括以下内容: 1.什么是grep命令 2.grep命令格式及说明 3.常用选项及示例 4.匹配模式之正则表达式 5.匹配模式之扩展正则表达式 6.总结 一、什么是grep命令 grep(globalsearchregularexpression_r(RE)andprintouttheline),这是我们接触到的第一个文本搜索工具,之前我们就说过正则表达式是对行进行操作的,所以grep也是根据我们指定的文本模式对目标文件进行逐行进行搜索,显示能够被模式所匹配到的行。简单点说呢,就是给grep命令一个模板,它会按照这个模板在文本里一行一行的扫描你想要的内容,搜索到的结果被直接送到你的屏幕上,不影响原文件内容,当然我们也可以通过管道重定向等方式进行其他包括替换删除等操作再送到你的屏幕上,也可以保存到文件里,而原文件可以保持不变。Egrep(grep-E)、fgrep(fgrep'PATTERN'FILE...不支持正则表达式)与之相近,均可以通过grep命令与不同的选项组合实现,因此在本文中,我们不再进行过多描述。
二、grep命令格式及说明 格式:grep[options]‘PATTERN’file,… 说明:PATTERN是搜索文本的关键,grep用PATTERN正则表达式来搜索文本中的每一行,在贪婪的模式下(命令尽可能多的匹配行内的字串),尽力去匹配。 三、常用选项及示例
示例 1.-n显示文本所在的行号,搜索以nologin结尾的行。
2.-v反向显示。显示不是以nologin为结尾的行。
3.-i不区分大小写。显示以root为开头的行。3 |
[root@localhost~]#grep--color=auto-i"^root"/etc/passwd root:x:0:0:root:/root:/bin/bash Root:x:500:500::/home/Root:/bin/bash |
4.-o只显示匹配的字串,而不是整行。显示以root开头的行。
3 | [root@localhost~]#grep--color=auto-o"^root"/etc/passwd root [root@localhost~]# |
5.-A#显示匹配到行的后#行。搜索以ftp开头的行
5 6 |
[root@localhost~]#grep--color=auto-A3"^ftp"/etc/passwd ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:Systemmessagebus:/:/sbin/nologin usbmuxd:x:113:113:usbmuxduser:/:/sbin/nologin 6.-B#显示匹配到行的前#行。搜索以ftp开头的行6 |
[root@localhost~]#grep--color=auto-B3"^ftp"/etc/passwd operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin 四、匹配模式之基本正则表达式 在grep命令格式中的PATTERN正则表达式是重点和难点。学好正则表达式,“走遍天下都不怕”,在vim的末行模式等场景下,正则表达式都有出色的表现。这里总结正则表达式元字符(不表示字符本身的意义,用于额外功能性的描述)。并辅以实例说明。在原元字符中经常可以看到的,是转义符。在扩展正则表达式中是不需要的。1.字符匹配
此处建立实验用文本test.txt,test1.txt内容为
1-1.匹配任意单个字符。4 |
[root@localhost~]#grep--color=auto"a.c"/tmp/test.txt abcd ~]# |
注:这里要匹配到a与c中间有一个任意字符的行
1-2[]指定范围内的任意字符。查找所有包含s或g的字串5
dseega
注:这里查找到了,a或者b开头的行,[ab]二者选其一。其他类似,不再一一列举。
1-3[^]指定范围外的任意单个字符。搜索不包含a的字串
7 | localhost~]#grep--color=auto"[^a]"/tmp/test.txt 2.次数匹配此处的匹配的次数指的是元字符前面的那个字符。
实验文本test1.txt5 |
#test1.txt xxy xy y xxy |
2-1*任意次数。6
]#
注:y前面可以出现任意个x,包括0个
2-2?0次或1次4
注:root,o出现了一次
2-3{m}匹配m次。4
注:出现两次o
2-4{m,n}至少m次,至多n次
5 | ~]#grep--color"x{1,2y"test1.txt 注:这里,x最少出现一次,最多出现了2次 2-5{m,}至少m次5 |
~]#grep--color"x{1}y"test1.txt 注:至少出现1次,因此y那一行由于是0次没有显示出来 2-6{0,80);">至多n次~]#grep--color"x{2}y"test1.txt 注:最多出现2次x 3.位置锚定 位置锚定是通过一定的格式,将一些字符或者字符串固定在想要的位置上。
演示用文本6 |
axyxyb abc |
3-1^锚定词首。显示以root开头的行。
3 | ~]#grep--color"^root"/etc/passwd 注:以root为行首的行 3-2$锚定词尾。显示以bash为词尾的行
|