标签:grep
grep的作用是打印匹配模式的行,只要包含匹配模式的行都打印出来。
语法格式:
grep [OPTIONS] PATTERN [FILE...] 说明:pattern是由文本字符和正则表达式的元字符组合而成的匹配条件。
常用的选项:
-i:忽略大小写。
-v:反向选择,打印不匹配的行。
--color=always|never|auto:使用颜色显示匹配的字符串。
-c:显示匹配的字符串出现的行数。如果和-v选项一起使用,则显示的是没有匹配的行数。
-o:只显示被模式匹配的串,每一个字符串显示一行。结合wc -l可以查看字符串出现的次数。
示例:
[root@Server3 ~]# grep ‘root‘ /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@Server3 ~]# grep "$HOME" /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@Server3 ~]# grep "$SHELL" /etc/passwd root:x:0:0:root:/root:/bin/bash mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash xguest:x:500:500:Guest:/home/xguest:/bin/bash frame:x:501:501::/home/frame:/bin/bash hive:x:5000:5000::/home/hive:/bin/bash test:x:5001:502::/home/test:/bin/bash [root@Server3 ~]# echo $SHELL /bin/bash [root@Server3 ~]# 说明:grep所匹配的模式可以用单引号,以可以用双引号,还可以不用引号。 如果不含有正则表达式的元字符组成的匹配条件时,即都是文本字符,可以不用引号,也可以用单引号。 如果含有正则表达式的元字符时,要用单引号。 如果含有变量时,用双引号。
示例2:
[root@Server3 ~]# grep root --color=always /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@Server3 ~]# 说明:如果想要以后搜索都以颜色的形式显示的话,可以使用alias功能。可以设置在/etc/bashrc中,为所有的用户设置,或是设置在.bashrc中,为指定的用户设置。 如: [root@Server3 ~]# echo "alias grep=‘grep --color=always‘" >> /etc/bashrc [root@Server3 ~]# source /etc/bashrc [root@Server3 ~]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@Server3 ~]# su - frame [frame@Server3 ~]$ grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [frame@Server3 ~]$
bash中的通配符(wildcard):
*:任意长度的任意字符。 ?:任意单个字符 []:匹配范围 [^]:排除匹配范围 [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]
正则表达式:REGular EXPression,REGEXP
元字符:
.:表示匹配任意单个字符。
示例1:
[root@Server3 ~]# grep ‘r..t‘ /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@Server3 ~]#
*:表示匹配前面的字符任意次,包括0次。
示例2:
[root@Server3 ~]# grep ‘ro*t‘ /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin rtkit:x:499:496:RealtimeKit:/proc:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin [root@Server3 ~]#
.*:表示匹配任意长度的任意字符。
示例3:
[root@Server3 tmp]# grep ‘a.*b‘ test ab acb adb amnb [root@Server3 tmp]# grep ‘a*b‘ test b ab acb adb amnb [root@Server3 tmp]# grep ‘aa*b‘ test ab [root@Server3 tmp]# cat test a b ab acb adb amnb [root@Server3 tmp]#
?:可能需要使用反斜线进行转义才可以,表示的是前面的字符出现0次或1次。\?
示例4:
[root@Server3 tmp]# grep ‘a\?b‘ test b ab acb adb amnb [root@Server3 tmp]#
\{n,m\}:匹配前面字符出现n到m次。 \{n,\}:匹配前面字符出现n次以上。 \{n\}:匹配前面字符出现n次。
示例5:
[root@Server3 tmp]# grep ‘a\{1,3\}b‘ test ab [root@Server3 tmp]#
位置锚定:
^:匹配行首,此字符后面的内容必须出现在行首。 $:匹配行尾,此字符后面的内容必须出现在行尾。 ^$:匹配空白行。
示例6:
[root@Server3 tmp]# grep ‘^r..t‘ /etc/passwd root:x:0:0:root:/root:/bin/bash [root@Server3 tmp]# [root@Server3 tmp]# grep ‘^id‘ /etc/inittab id:3:initdefault: [root@Server3 tmp]#
[root@Server3 tmp]# grep ‘bash$‘ /etc/passwd root:x:0:0:root:/root:/bin/bash mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash xguest:x:500:500:Guest:/home/xguest:/bin/bash frame:x:501:501::/home/frame:/bin/bash hive:x:5000:5000::/home/hive:/bin/bash test:x:5001:502::/home/test:/bin/bash [root@Server3 tmp]#
[ ]:表示指定匹配范围内的任意单个字符。 [^ ]:表示指定范围外的任意单个字符。 注意:使用下面的匹配时,要使用两个方括号,如[[:alpha:]] [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]
示例7:
[root@Server3 tmp]# grep ‘[[:digit:]]$‘ /etc/inittab # 5 - X11 [root@Server3 tmp]# grep ‘[0-9]$‘ /etc/inittab # 5 - X11 [root@Server3 tmp]#
位置锚定:
\<:表示其后面的任意字符必须作为单词的首部出现。 \>:表示其前面的任意字符必须作为单次的尾部出现。 上述的两个,也可以用\b来表示。 如:\broot表示root出现在词首。root\b表示root出现在词尾。 \<root\>:表示的root单次必须出现在词首和词尾。
示例8:
[root@Server3 tmp]# grep ‘root\b‘ /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@Server3 tmp]# grep ‘\broot\b‘ /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@Server3 tmp]#
分组:
\(\):将字符串分组,作为一个整体。
如:\(ab\),作用是将ab分为一组,作为一个整体。
使用分组的目的是为了在后面进行引用,\1调用前面第一个左括号以及与之对应的右括号里面匹配的内容。
示例9:
[root@Server3 ~]# grep ‘\(root\)\(:\).*\2\1‘ /etc/passwd root:x:0:0:root:/root:/bin/bash [root@Server3 ~]#
本文出自 “HeZhang” 博客,请务必保留此出处http://hezhang.blog.51cto.com/1347601/1711005
标签:grep
原文地址:http://hezhang.blog.51cto.com/1347601/1711005