grep命令使用技巧

grep [选项] pattern [文件名]

命令中的选项为:

  • -? 同时显示匹配行上下的?行,如:grep -2 pattern filename 同时显示匹配行的上下2行。
  • -A ? 显示匹配行和后面的?行, 如: grep -A 2 pattern filename
  • -B ? 显示匹配行和前面的?行
  • -b,–byte-offset 打印匹配行前面打印该行所在的块号码。
  • -c,–count 只打印匹配的行数,不显示匹配的内容。
  • -f File,–file=File 从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
  • -h,–no-filename 当搜索多个文件时,不显示匹配文件名前缀。
  • -i,–ignore-case 忽略大小写差别。
  • -q,–quiet 取消显示,只返回退出状态。0则表示找到了匹配的行。
  • -l,–files-with-matches 打印匹配模板的文件清单。
  • -L,–files-without-match 打印不匹配模板的文件清单。
  • -n,–line-number 在匹配的行前面打印行号。
  • -s,–silent 不显示关于不存在或者无法读取文件的错误信息。
  • -v,–revert-match 反检索,只显示不匹配的行。
  • -w,–word-regexp 如果被<和>引用,就把表达式做为一个单词搜索。
  • -V,–version 显示软件版本信息。
1
2
3
4
5
6
7
8
9
10
11
12
ls -l | grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。
grep 'test' d* 显示所有以d开头的文件中包含test的行。
grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。
grep '[a-z]' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
grep 'w(es)t.*' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成'w(es)t.*'就可以了。
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 的行。

pattern为所要匹配的字符串,可使用下列模式

1
2
3
4
5
6
7
. 匹配任意一个字符
* 匹配0 个或多个*前的字符
^ 匹配行开头
$ 匹配行结尾
[] 匹配[ ]中的任意一个字符,[]中可用 - 表示范围,
例如[a-z]表示字母a 至z 中的任意一个
\ 转意字符