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个连续小写字符的字符串的行。
水平有限,肯定不全,希望能给您带来一点帮助
原文地址:http://10999737.blog.51cto.com/10989737/1730879