linux常备工具之grep

grep能够在一个或多个文件中搜索指定的模式或关键字,该命令的一般格式为:

grep pattern files

用grep搜索文件内容

先来看一下grep最简单的用法。假设当前目录有一个文本文件c.txt,它的内容如下

$ cat c.txt 
jobcenter-test-1
jobcenter-test-2
jobcenter-test-3
jobcenter-prod-1
jobcenter-prod-2
jobcenter-prod-3

假设我们想找出包含prod的所有行,可以使用下面的命令

$ grep prod c.txt 
jobcenter-prod-1
jobcenter-prod-2
jobcenter-prod-3

这样就很简单地完成了对单个文件内容的搜索。

$ grep keywords file1 file2 file3

上面的用法可以同时对三个文件的内容进行搜索

$ grep keywords *

上面的用法可以同时对当前目录下的所有文件的内容进行搜索

在管道中使用grep来检索输入

如果不指定文件名的话,grep将对标准输入进行搜索,这种用法经常出现在linux管道中。例如:

$ ls -l | grep file1

上面的用法仅会列出file1的文件信息。

$ ps -ef | grep process_name

上面的用法常用于查找一个进程的信息。

$ tail -f a.log | grep --line-buffered keywords

结合--line-buffered参数,还可以对tail -f的结果进行过滤。上面的用法常用来过滤某些正在持续写入的日志文件。

搜索时的常用参数

使用grep搜索时,配合下面的参数,可以应对更多的情况。下面是我个人比较常用的参数

  • -i 忽略大小写。
  • -v 反向搜索,不显示满足搜索条件的行。(正常情况下是只显示满足搜索条件的行)
  • -e 使用正则表达式
  • -E 使用扩展的正则表达式。这个参数可以匹配更高级的正则用法,具体也没搞不太清楚,但如果想用正则来过滤的话,尽量用大E代替小e
  • -n 显示行号
  • -A num 显示配合结果后面的num行内容(After)
  • -B num 显示配合结果前面的num行内容(Before)
  • -C num 显示配合结果上面和下面各num行内容(Context)
  • -l 多文件搜索时,加入此参数的话,只显示匹配内容的文件名
  • --no-filename 多文件搜索时,默认情况下会显示出匹配到的每一行内容以及所在的文件名。加入此参数后,将不显示匹配内容所在的文件名。

你可能感兴趣的:(linux,linux,shell脚本编程)