您的位置:首页 > 运维架构 > Linux

grep简单用法

2014-04-28 16:58 447 查看
grep是linux中比较常用的字符处理命令,主要用来搜索要查找的字符所在的行。
grep主要包含:grep,egrep和fgrep,这里我们主要总结一下egrep的简单用法
单纯解析命令比较枯燥,我们结合这样一个文本来作练习,文件名为regular_express.txt,文本内容如下:
"Open Source" is a good mechanismto develop programs!
apple is my favorite food!
Football game is not use feet only!
this dress doesn't fit me!
However, this dress is about $ 3183dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can't finish the test.
Oh! The soup taste good.
motorcycle is cheap than car!
This window is clear!
the symbol '*' is represented as start!
Oh!My god!
The gd software is a library for draftingprograms.
You are the best is mean you are the no. 1!
The world <Happy> is the same with"glad"!
I like dog!
google is the best tools for searchkeyword!
goooooogle yes!
go! go! Let's go!
# I am VBird
为了方便区别,我们将grep匹配到的字符红色高亮显示:
[root@instructor ~]# alias grep="grep--color=auto"
1.假设我们要查找以小写字母开头的行
[root@instructor ~]# grep"^[a-z]" regular_express.txt
这里“^”表示,以后面字符开头,“[a-z]”表示匹配从a-z的26个小写字母中的任意一个字符,“^[a-z]”结合起来就表示匹配任意小写字母开头行,输出结果如下:



同理,如果要查找以任意大写字母开头的行可以使用“^[A-Z]”来表示
2. 查找以大写字母开头的行
[root@instructor ~]# grep "^[A-Z]"regular_express.txt
输出结果如下:
[root@instructor ~]# grep '^[A-Z]'regular_express.txt



3.选取包含“the”字符串的行,并列出行号
[root@instructor ~]# grep -n 'the'regular_express.txt


这里的“-n”是选项中的一种,表示列出行号。还有很多选择可以帮助我们选取所需要的行,例如,刚才我们查找了包含“the”的行,现在我们要查找不包含“the”的行怎么办?
4.利用选项反向选取,查找不包含“the”的行
[root@instructor ~]# grep -nv 'the'regular_express.txt


这里的“-v”选项就表示反向选取,选取不匹配字符串的行。
5.如果想要选取以“the”开头且不管大小写的行,则可以加上选项“-i”
[root@instructor ~]# grep -in '^the'regular_express.txt



6.查找以“.”结尾的行
查找以某字符串开头的行可以使用“^”,查找以某字符结尾的行可以使用“$”,但是这里“.”有特殊含义,我们需要使用“\”将其特殊含义取消,即“\.$”
[root@instructor ~]# grep -n '\.$'regular_express.txt


7.查找包含数字的行
[root@instructor ~]# grep -n '[0-9]'regular_express.txt


[0-9]表示只要匹配0-9中任一数字即可
通过上面例子,可以总结一下grep简单的用法:
首先我们了解一下grep的语法:#grep [option] 'pattern' filename
Option:
-a:将二进制文件以textwe文件的方式查找数据
-c:计算找到‘查找字符串’的次数
-v:反向选取,只显示不符合模式的行
-o:只显示被匹配到的字符串,而不是整个行
-i:不区分字符大小写
-A:后面可加数字,after的意思,表示除了列出匹配的那一行,后面的n行也列出来
-B:后面可加数字,before的意思,表示除了列出匹配的那一行,前面的n行也列出来
-E:使用扩展的正则表达式,grep-E = egrep
--color=auto:表示将查找到的字符串高亮显示
Pattern:这里就是我们需要查找的字符串
在搜索要查找的字符串时,我们可以借用很多特殊的符号来帮助我们简化工作:
[:alnum:]:代表英文大小写字符及数字,即a-z,A-Z,0-9
[:alpha:]:代表任何英文大小写字符,,即a-z,A-Z
[:blank:]:代表空格键与[TAB]按键
[:space:]:代表空白行
[:digit:]:代表数字,即0-9
[:lower:]:代表小写字符,即a-z
[:upper:]:代表大写字符,即A-Z
[:punct:]:代表标点符号,即“‘?!:;#$
例:查找任意以小写字母开头的行
[root@instructor ~]# grep -n '^[[:lower:]]'regular_express.txt


输出结果等同于:[root@instructor ~]# grep"^[a-z]" regular_express.txt
例:查找任意以大写字母开头的行
[root@instructor ~]# grep -n '^[[:upper:]]'regular_express.txt
输出结果等同于:
[root@instructor ~]# grep "^[A-Z]"regular_express.txt

再来看一下基本正则表达式:
^word:查找以‘word’开头的行word$:查找以‘word’结尾的行.:代表一定有一个任意字符*:代表重复前面的字符零次到无穷多次a*b:ab,aab,acb,b.*:匹配任意长度的任意字符\:将特殊符号的特殊意义取消[]:匹配指定范围内的任意单个字符[^]:匹配指定范围外的任意单个字符\?:匹配前面的字符0次或1次\{m,n\}:匹配前面的字符至少m次,至多n次\{0,n\}:0-n次\{m,\}:至少m次\{m\}:精确匹配m次如:a\{1,3\}b:练习:1.显示/proc/meminfo文件中以s或S开头的行,即不区分大小写[root@instructor ~]# grep -n '^[sS]' /proc/meminfo或者[root@instructor ~]# grep -in '^s' /proc/meminfo两者显示结果一致

2.显示/etc/passwd中以nologin结尾的[root@instructor ~]# grep 'nologin$'/etc/passwd


内容较多,不逐一显示。3、显示/etc/rc.d/rc.sysinit中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行[root@instructor ~]# grep'^#[[:space:]]\{1,\}[^[:space:]]' /etc/rc.d/rc.sysinit

4、显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n[root@instructor ~]# grep '.n.*.n' /etc/rc.d/rc.sysinit结果比较多,就不截图显示了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux