文本处理命令系列――grep
2015-11-09 14:28
176 查看
grep的作用是打印匹配模式的行,只要包含匹配模式的行都打印出来。语法格式:
-c:显示匹配的字符串出现的行数。如果和-v选项一起使用,则显示的是没有匹配的行数。-o:只显示被模式匹配的串,每一个字符串显示一行。结合wc -l可以查看字符串出现的次数。
示例:
示例2:
bash中的通配符(wildcard):
正则表达式:REGular EXPression,REGEXP元字符:
位置锚定:
位置锚定:
分组:\(\):将字符串分组,作为一个整体。如:\(ab\),作用是将ab分为一组,作为一个整体。使用分组的目的是为了在后面进行引用,\1调用前面第一个左括号以及与之对应的右括号里面匹配的内容。示例9:
本文出自 “Felix Zhang” 博客,请务必保留此出处http://hezhanglinux.blog.51cto.com/10861477/1711006
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 ~]#
本文出自 “Felix Zhang” 博客,请务必保留此出处http://hezhanglinux.blog.51cto.com/10861477/1711006
相关文章推荐
- webView的使用
- 论try/catch的重要性,我们经常遇到代码出现无法调试的错误,程序退出的时候崩溃。这跟我们代码日常保护的习惯息息相关。
- mybtais 映射文件参数简写
- Android OkHttp
- eclipse中如何修改不同后缀文件类型的编码
- FMDB使用(转载)
- jquery 表单事件
- linux 添加用户、权限
- CPU affinity 进程和线程的亲缘性
- JCIFS
- Android 添加Fragment到回退栈
- python 文件操作
- python数据挖掘常用包
- Python之路【第三篇】:Python基础(二)
- Activity的启动过程
- JavaSript面向对象
- 文本处理命令――grep
- java.lang.outofMemoryError解决方法
- Tushare学习笔记
- mysql日期相减操作