每天学命令-grep 文本搜索

grep全称global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来。这名字就怪吓人,如果熟练掌握正则表达式,配上这命令 Linux 里可以横着走了。

这个命令参数实在太多,加上正则表达式估计一张纸不够。那就直接上实例吧。

使用实例

在当前目录中,查找后缀带有cpp字样的文中包含test字符串的文件,并打印所在行

grep test *cpp
grep --colorauto test *cpp      # 用颜色标记

通过”-v”参数可以打印出不符合条件行的内容。

grep -v test *cpp

系统报警显示了时间,但是日志文件太大无法直接 cat 查看。(查询含有特定文本的文件,并拿到这些文本所在的行)。-n--line-number 可以显示符合样式的那一行之前,标示出该行的列数编号。

grep -n '2019-10-24 00:01:11' *.log

grep 静默输出,不会输出任何信息,如果命令运行成功返回 0,失败则返回非 0 值。一般用于条件测试。

grep -q "test" filename

在多级目录中对文本进行递归搜索

grep "text" . -r -n

配合管道,查找指定的进程信息

ps -ef | grep svn

查找指定的进程个数,-c计数

ps -ef | grep svn -c

常用正则表达式通配符
| 通配符 | 功能 |
| :—-: | :—-: |
| c* | 将匹配 0 个(即空白)或多个字符 c(c 为任一字符) |
| . | 将匹配任何一个字符,且只能是一个字符 |
| [xyz] | 匹配方括号中的任意一个字符 |
| [^xyz] | 匹配除方括号中字符外的所有字符 |
| ^ | 锁定行的开头 |
| $ | 锁定行的结尾 |

id.txt中找到所有以 3207 开头的数据

grep ^3207 id.txt