grep 可以对文件内容过滤,默认情况是对行过滤;
grep语法格式:# grep  <pattern>  <arg>   
实例:grep  root  passwd
grep 选项
-m  匹配条件后停止; # grep -m1`whoami` /etc/passwd
-i 忽略条件字符大小写
-v 显示不能被条件匹配的字符; # grep -v root /etc/passwd;不包含root的行
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息 ,结果不一样 echo $?
-A 匹配后N行
-B 匹配前N行
-C 匹配前后N行
-e 多个选项的逻辑or关系;# grep -e 'cat' -e 'dog' file
-w 匹配整个单词
-E 匹配支持ERE
-F 相当于fgrep,不支持正则表达式
-f 根据文件内容作为标准输入顾虑
 # grep -f file.txt /etc/passwd,根据 file.txt的内容,匹配 passwd
正则表达式分类:基本正则表达式(BRE)和扩展的正则表达式 (ERE)
字符匹配:
> 正则表达式的元字符含义
.  匹配任意单个字符
[]  匹配指定范围内的任意单个字符
[^]  匹配任意范围以外的任意单个字符;
[:lower:]任意小写字母
[:upper:]任意大写字母
[:alpha:]任意大小写的字母
[:alnum:]字母和数字(大小写和数字)
[:digit:]任意十进制数字

匹配次数
*  :匹配前面的字符任意次数,包括0次;尽可能的匹配;
.* :匹配任意长度的任意字符
\? :匹配器前面的字符0或1次,对前面字符可有,可无;
\+ :匹配其前面的字符至少1次;
\{n\}:匹配前面的字符n次
\{m,n\}:匹配前面的字符至少每次,最多n次;
\{,n\}:匹配前面的字符最多n次;
\{n,\}:匹配前面的字符最少n次;

位置锚定--定位出现的位置
^ 行首锚定;以什么开头
$ 行尾锚定:以什么结尾
^pattern$:用于模式匹配整行
^$     空行
^[[:space:]]*$ 空白行
\< 或 \b :词首锚定,用于单词模式的左侧;
\> 或 \b :词尾锚定,用于单词模式的右侧;
分组\{\} : 将一个或多个字符捆绑在一起,当做一个整体处理,如\(root\)\+
\1  表示从左侧起第一个左括号以及与之匹配右括号之间的模式 所匹配到的字符;
实例:echo abcabcabc |grep "\(abc\)\{3\}"
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身;
echo abcabcabc  xyz xyz |grep "\(abc\).*\(xyz).*\1"
\1匹配的是前面的一个结果
或 :\| -- 实例 a 或 b==a\|b


egrep及扩展的正则表达式
egrep = grep -E 
字符匹配
.   任意单个字符;
[]  指定范围的字符;
[^] 不在指定范围的字符;

次数匹配
*    匹配前面字符任意次数
?	可有可无0或1次
+ 	1次或多次
{m} 匹配m次
{m,n}至少m数,最多n数;

位置锚定
^ 行首
$ 行尾
\< 词首or \b
\> 词尾 or \b
分组 ()
后向引用 \1,\2
或  a|b

实例
1、搜索某文件是否包含字符串
命令格式:grep "被查找的字符串" Filename1

2、在多个文件中检索某个字符串
命令格式:
grep "被查找的字符串" FileName1...

3、显示检索内容在文件中的行  “-n“ 选项 
命令格式: grep -n "被查找的字符串" *.log 

4、检索时需要忽略大小写问题,可以使用参数 “-i”
命令格式: grep -i "被查找的字符串" *.log

5、从文件内容查找不匹配指定字符串的行
命令格式:grep –v "被查找的字符串" FileName

搜索查找匹配的行数:

grep –c "被查找的字符串" FileName
grep "被查找的字符串"  FileName | wc -l

7、递归搜索某个目录以及子目录下的所有文件
命令格式:grep –r "被查找的字符串"  FileDir

8、获取哪些文件包含搜索的内容,并列出文件名
命令格式:grep -H –r "被查找的字符串"  FileDir  | cut -d: -f1| [uniq]

9、获取与整个搜索字符匹配的内容
命令格式:grep –w "被查找的字符串" FileName