Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 入门 > Linux入门 > 正文

Linux入门 四 grep

时间:2014-06-03 18:15 来源:未知 作者:www.51ou.com 阅读:

 接触Linux的时间不长,从第一周的悠悠然学习,到现在的神经紧绷,晕晕乎乎,仿佛过山车一般,开始的“美好”总是那么短暂,而后的刺激一波未平一波又起。

 

   在学习Linux前行的道路上,第一个拦路虎恐怕是就是令人烦恼的文本检索了,冗长的字符串、动辄成千上万行的日志文件,想从中找到你想要的那一条或者多条,实在是不容易。Linux的提供给我们了一个强大的命令grep。通过grep命令与通配符、正则表达式的组合,可以轻松的从看似杂乱的一行行文本行中检索出来。可是,这么强大的命令,想要学好,却不是喝水吃饭那么容易。必须要深入的理解,多加练习,才能真正的学会使用它。下面,我做一个初级的Linux学习者,总结下自己的浅薄认识,一来锻炼自己,二则分享给大家,如果纰漏错误,还望指正。

 

   在下面的总结中,文本搜索多使用/etc/passwd做演示,各位小友也可以使用其他的文本文件自行测试验证。

   本文的主要内容包括以下内容:

 

   什么是grep命令

   grep命令格式及说明

   常用选项及示例

   匹配模式之正则表达式

   匹配模式之扩展正则表达式

 

一、什么是grep命令

    grep(global search regular expression_r(RE) and print out theline),这是一个典型的文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能够被模式所匹配到的行。通俗来所就是,给grep命令一个模板,它会按照这个模板在文本里一行一行的扫描,搜索到的结果被送到屏幕,不影响原文件内容。与之相近的命令egrep、fgrep的功能,均可以通过grep命令与不同的选项组合实现,因此在本文中,不在单独详细介绍。

 

二、grep命令格式及说明

 

   格式:grep [options] ‘PATTERN’ file,…

   说明:PATTERN是搜索文本的关键,grep用PATTERN正则表达式来搜索文本中的每一行,在贪婪的模式下(命令尽可能多的匹配行内的字串),尽力去匹配。

 

三、常用选项及示例

 

--color=auto  -n 将搜索出的符合条件的行的匹配上的字符自动着色显示;显示行号
-v 反向查找,显示出不能被模式匹配到的行
-E 支持扩展正则表达式
-i 不区分字符大小写
-o 仅显示被模式匹配到的字串,而非整行
-A # 显示被匹配到的行,包括它之后的#行(#表示正整数)
-B # 显示被匹配到的行,包括它之前的#行(#表示正整数)
-C # 显示被匹配到的行,包括它前后的#行(#表示正整数)

   示例

   1.-n 显示文本所在的行号,搜索以nologin结尾的行。

 

1
2
3
4
[root@station47 tmp]# grep --color=auto -n "nologin$" /etc/passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin

 

   2.-v 反向显示。显示不是以nologin为结尾的行

 

1
2
3
4
5
[root@station47 tmp]# grep --color=auto -n -v  "nologin$" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt

 

   3.-i 不区分大小写。显示以root为开头的行。

 

1
2
3
[root@station47 tmp]# 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开头的行

 

1
2
3
[root@station47 tmp]#  grep --color=auto -o "^root" /etc/passwd
root
[root@station47 tmp]#

 

   5.-A # 显示匹配到行的后#行。搜索以ftp开头的行

 

1
2
3
4
5
6
[root@station47 tmp]# grep --color=auto -A 3 "^ftp" /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
[root@station47 tmp]#

 

   6.-B # 显示匹配到行的前#行。搜索以ftp开头的行

 

1
2
3
4
5
6
[root@station47 tmp]# grep --color=auto -B  3 "^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
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@station47 tmp]#

 

四、匹配模式之基本正则表达式

 

   在grep命令格式中的PATTERN正则表达式是重点和难点。学好正则表达式,“走遍天下都不怕”,在vim的末行模式等场景下,正则表达式都有出色的表现。这里总结正则表达式元字符(不表示字符本身的意义,用于额外功能性的描述)。并辅以实例说明。在原元字符中经常可以看到的\,是转义符。在扩展正则表达式中是不需要的。

 

   1.字符匹配

 

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

[0-9], [[:digit:]]

[a-z], [[:lower:]]

[A-Z], [[:upper:]]

[[:alpha:]]

[[:alnum:]]

[[:space:]]

[[:punct:]]   类似通配符里的内容

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

   此处建立实验用文本test.txt,test1.txt内容为  

1
2
3
4
5
6
7
#test.txt
abc
abcd
aaaa
acdgssd
sddes
dseega

 

   1-1 . 匹配任意单个字符。

 

1
2
3
4
[root@station47 ~]# grep --color=auto "a.c" /tmp/test.txt
abc
abcd
[root@station47 ~]#

   注:这里要匹配到a与c中间有一个任意字符的行

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《Linux入门 四 grep》技术文章,《Linux入门 四 grep》详细使用和说明,有时《Linux入门 四 grep》可能不完善、敬请谅解!如果《Linux入门 四 grep》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片