码迷,mamicode.com
首页 > 其他好文 > 详细

细说grep命令

时间:2016-01-03 00:58:55      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:linux grep命令   简单明白的解析

grep简介

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

  (注意:这个命令重点在行,或者说是按行来读取、搜索的,使用权限是所有用户都可以用)

Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,所有的命令正则表达式符号也会被看成字符。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

[options]主要参数:

-c:只输出匹配行的计数。

-I:不区分大 小写(只适用于单字符)。

-h:查询多文件时不显示文件名。

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及 行号。-s:不显示不存在或无匹配文本的错误信息。

-v:显示不包含匹配文本的所有行。pattern正则表达式主要参数:

\: 转义符:忽略正则表达式中特殊字符的原有含义。

^:凸号:匹配正则表达式锚定行首用的。例如:“^root” 表示已root开头的行

$: 匹配正则表达式锚定行尾用的。例如:“login$"表示login结尾的所有行

\<:从匹配正则表达 式的行开始。

\>:到匹配正则表达式的行结束。

[ ]:单个字符,如[A]即A符合要求 。

[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。

* :有字符,长度可以为0。


grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,

grep -l pattern files :只列出匹配的文件名,grep -L pattern files :列出不匹配的文件名,grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不                                  是’magical’),

grep -C number pattern files :匹配的上下文分别显示[number]行,

grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,

grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

grep -n pattern files  即可显示行号信息

grep -c pattern files  即可查找总行数


 下边是一写使用例子,能好的说明grep的使用方法

将/etc/passwd,有出现 root 的行取出来

# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

# cat /etc/passwd | grep root 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号

# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin


将/etc/passwd,将没有出现 root 的行取出来。-v 表示取反。因为没有root的太多所有我就只取最后三行

# grep -v root /etc/passwd | tail -3  
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
marco:x:500:500:marco-chen:/home/marco:/bin/bash

 

将/etc/passwd,将没有出现 root 和nologin的行取出来

# grep -v root /etc/passwd | grep -v nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
marco:x:500:500:marco-chen:/home/marco:/bin/bash

 编辑快捷键,让每次挑选出来的关键字都会显示特殊颜色

~]#vi .bashrc
# User specific aliases and functions
alias rm=‘rm -i‘
alias cp=‘cp -i‘
alias mv=‘mv -i‘  (在这下边输入
alias grep=‘grep --color=auto‘ (其他不动。ESC -> shift+:wq 保存退出)

根据文件内容递归查找目录

# grep ‘good’ *           #在当前目录搜索带‘good‘行的文件

# grep -r ‘good’ *        #在当前目录及其子目录下搜索‘good‘行的文件

# grep -l -r ‘good’ *     #在当前目录及其子目录下搜索‘good‘行的文件,但是不显示匹配的行,只显示匹配的文件

 



字符类的搜索:在/etc/passwd文件中,“n:/sbin”“nologin” 可以发现,其实她们有共同的‘n.....n‘ 存在! 因此我可以这样来搜:

[root@hostname ~]#grep "n.....n"  etc/passwd  | head -4
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

$ grep ‘nologin’   p*显示所有以p开头的文件中包含 nologin的行。

$ grep ‘nologin’ aa bb cc显示在aa,bb,cc文件中匹配nologin的行。

$ grep ‘[a-z]\{5\}’ /etc/passwd显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

              水平有限,肯定不全,希望能给您带来一点帮助

细说grep命令

标签:linux grep命令   简单明白的解析

原文地址:http://10999737.blog.51cto.com/10989737/1730879

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!