grep是一个强大的文本搜索工具命令,用于查找文件中符合指定格式的字符串,支持正则表达式。如不指定任何文件名称,或是文件名为 -,则gerp命令从标准输入设备中读取数据。

grep 家族包括grep egrepfgrep。 egrep 和 fgrep 命令只跟 grep 有很小的不同。 egrep 是 grep 的扩展 , fgrep 就是 fixed grep 或 fast grep,该命令使用任何正则表达式中的元字符表示其自身的字面意义,不在特殊。其中 egrep 就等同于 “ grep -E” ,fgrep 等同于”grep -F”。(有点晕。。) Linux中的 grep 功能强大,支持很多参数,可以方便地用来进行文本处理工作。

grep 命令常用参数说明

  1. -a 不要忽略二进制数据
  2. -A 除了显示符合条件的那一行之外,并显示该列之后的内容
  3. -b 在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号
  4. -B 除了显示符合条件的那一行之外,并显示该列之前的内容
  5. -c 计算符合结果的行数
  6. -C 除了显示符合条件的那一行之外,并显示该列之前后的内容
  7. -e 按指定的字符串查找
  8. -E 按指定的字符串指定的正则查找
  9. -f 指定范本文件,其内容含有一个或多范本样式
  10. -F 将范本样式视为固定的字符串列表
  11. -G 将范本样式视为普通的表示法来用
  12. -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称
  13. -H 在显示符合范本样式的那一列之前,标示该列所属的文件名称
  14. -i 忽略字符大小写
  15. -l 列出文件内容符合指定的范本样式的文件名称
  16. -L 列出文件内容不符合指定的范本央视的文件名称
  17. -n 在显示符合范本样式的那一列之前,标示出该列的列数编号
  18. -q 不显示任何信息
  19. -r 在指定路径中递归查找
  20. -s 不显示错误信息
  21. -v 反向查找
  22. -V 显示版本信息
  23. -w 匹配整个单词
  24. -x 只显示全列符合的列
  25. --help 在线帮助

grep 单独使用时至少有两个参数,如少于两个参数,grep 会一直等待,直到该程序被中断。如果遇到这样的情况,可以使用 Ctrl + c 终止。 默认情况下只搜索当前目录,如果递归查找子目录,可使用-r选项。

grep命令使用方法

在指定的文件中查找字符串:

  1. grep root /etc/passwd /etc/passwd 中查找 root 字符串

结合管道一起使用:

  1. cat /etc/passwd | grep root
  2. grep mysql my.cnf | grep datadir

查找符合条件的内容所在的行号:

  1. grep -n root /etc/passed

在 nginx.conf 中查找包含 listen 的行号并打印出来:

  1. grep listen nginx.conf

查找指定字符串:

  1. grep uuid test.txt 区分大小写
  2. grep UUID test.txt 区分大小写
  3. grep -i uuid test.txt 不区分大小写

列出匹配字符串的文件名:

  1. grep -l uuid test.txt

列出不匹配字符串的文件名:

  1. grep -L uuid test.txt

匹配整个单词:

  1. gerp -w UU test.txt
  2. grep -w UUID test.txt

除了显示匹配的行,分别显示该行上下文的 n 行:

  1. grep -C1 UUID test.txt 此处 n = 1 ,跟在 -C 参数后面

按正则表达式查找指定字符串:

  1. grep -n -E "^[a-z]+" test.txt
  2. grep -n -E "^[^a-z]+" test.txt
  3. grep -E "datadir | socket" my.cnf

递归查找:

  1. grep -r var . | head -3

grep 正则参数说明

  1. ^ 指定匹配字符串的行首
  2. $ 指定匹配字符串的结尾
  3. * 表示0个以上的字符
  4. + 表示1个以上的字符
  5. \ 去掉指定字符的特殊含义
  6. ^ 指定行的开始
  7. $ 指定行的结束
  8. . 匹配一个非换行的字符
  9. * 匹配零个或多个先前字符
  10. [] 匹配一个指定范围内的字符
  11. [^] 匹配一个不在指定范围内的字符
  12. \(..\) 标记匹配字符
  13. < 指定单词的开始
  14. > 指定单词的结束
  15. x{m} 重复字符 xm
  16. x{m}, 重复字符 x 至少 m
  17. x{m,n} 重复字符x 至少 m 次,不多于 n
  18. w 匹配文字和数字字符,也就是 [A-Za-z0-9]
  19. b 单词锁定符
  20. + 匹配一个或多个先前的字符
  21. ? 匹配零个或多个先前的字符
  22. a|b|c 匹配 a b c
  23. () 分组符号
  24. [:alnum:] 文字数字字符
  25. [:alpha:] 文字字符
  26. [:digit:] 数字字符
  27. [:graph:] 非空格、控制字符
  28. [:lower:] 小写字符
  29. [:cntrl:] 控制字符
  30. [:print:] 非空字符(包括空格)
  31. [:punct:] 标点符号
  32. [:space:] 所有空白字符(新行,空格,制表符)
  33. [:upper:] 大写字符
  34. [:xdigit:] 十六进制数(0-9,a-f,A-F)