1. 功能
    文本搜索,包括打印内容也可以搜索,可以使用正则表达式
  2. 用法
    grep [option] [pattern] [filename]
  3. option
  • 匹配控制选项
-e: 使用PATTERN作为搜索模式。指定字符串做为查找文件内容的样式。   
-f: 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-i: 搜索时候忽略大小写
-r/R: 递归搜索文件,当搜索对象不是文件而是目录时使用。
-v: 反转匹配,选择没有被匹配到的内容。
-w:匹配整词,精确地单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)
-x:仅选择与整行完全匹配的匹配项。精确匹配整行内容(包括行首行尾那些看不到的空格内容都要完全匹配)
  • 一般输出选项
-c:计算匹配的数量。
-L:列出文件内容不符合指定的范本样式的文件名称
-l : 列出文件内容符合指定的范本样式的文件名称。
-m [num]:指定显示结果的行数。当匹配内容的行数达到num行后,grep停止搜索,并输出停止前搜索到的匹配内容
-o: 只输出匹配的具体字符串,匹配行中其他内容不会输出
-q:安静模式,不会有任何输出内容,查找到匹配内容会返回1,未查找到匹配内容就返回非0
-s:不会输出查找过程中出现的任何错误消息,-q和-s选项因为与其他系统的grep有兼容问题,shell脚本应该避免使用-q和-s,并且应该将标准和错误输出重定向到/dev/null 代替。
  • 输出前缀选项
-b:输出每一个匹配行(或匹配的字符串)时在其前附加上偏移量(即从文件第一个字符到该匹配内容之间的字节数)
-H:在每一个匹配行之前加上文件名一起输出(针对于查找单个文件),当查找多个文件时默认就会输出文件名
-h:禁止输出文件名的前缀。无论查找几个文件都不会在匹配内容前输出文件名
-n:输出匹配内容的同时输出其所在行号。
-T:初始标签确保实际行内容的第一个字符位于制表位上,以便对齐标签看起来很正常。在匹配信息和其前的附加信息之间加入tab以使格式整齐。
  • 匹配下上文控制选项
-A [num]:匹配到搜索到的行以及该行下面的num行
-B [num]:匹配到搜索到的行以及该行上面的num行
-C [num]:匹配到搜索到的行以及上下各num行
  1. 实例
  • 多个文件同时查找
grep "pattern_str" file1 file2
  • 使用正则表达式进行匹配
grep -E "[1-9]+"
或
egrep "[1-9]+"
  • 在当前目录下搜索字符串‘text’,并显示其所在行数
grep "text" . -r -n
# .表示当前目录。
  • 使用-e进行多个匹配规则
echo this is a text line | grep -e "is" -e "line" -o
is
line
  • 在grep搜索结果中包括或者排除指定文件
#只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --include *.{php,html}
#在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"
#在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist