grep命令是Linux系统中一个强大的文本搜索工具。根据个人鄙陋的一点经验来说,这是一个程序员在Linux系统最常用的几个命令之一。举个使用频率能和其并驾齐驱的命令,比如:cd。grep就像程咬金的“三板斧”,在debug时,抡起grep,再顽固的bug也会无所遁形的。

常用参数

执行 man grep 可以看到grep有非常多的参数。下面介绍一下,一些个人感觉比较常用的。

短参数 长参数 说明 速记
--color[=WHEN] 输出文本的颜色控制,when有三个值:never:不着色, always:全部着色,auto:着色
-l --files-without-match 只输出匹配内容所在的文件名
-L --files-with-matches 只输出未匹配内容所在的文件名
-H --with-filename 显示匹配的文件名,有多个文件时,该配置默认开启
-h --no-filename 不显示匹配的文件名
-n --line-number 显示匹配文本的行数 n是line number,就是行号
-A NUM --after-context=NUM 显示匹配文本后面的NUM行 A是after,后面
-B NUM --before-context=NUM 显示匹配文本前面的NUM行 B是before context,前面
-C NUM,-NUM --context=NUM 显示匹配文本前后的NUM行 C是context,上下文
-i --ignore-case 忽略大小写 i是ignore-case,是小写的i哈
-r --recursive 递归匹配目录下的所有文件

使用场景举例

color参数

如果grep的默认配置没有对匹配文本进行着色。则我们可以使用--color=auto参数进行配置,则会对已经匹配的文本进行着色。
但当我们使用管道命令,进行多次grep过滤时,--color=auto是只对最后一次匹配进行着色的。如果我们想把所有的匹配都进行着色,那我们就可以使用--color=always进行设置,样例如下:

# 无颜色
echo "这是颜色测试,红色,蓝色" |grep "红色"
# “红色”被着色
echo "这是颜色测试,红色,蓝色" |grep "红色" --color=auto
# 都没有颜色
echo "这是颜色测试,红色,蓝色" |grep "红色" --color=auto|grep "蓝色"
# “红色”和“蓝色”都被着色
echo "这是颜色测试,红色,蓝色" |grep "红色" --color=always|grep "蓝色" --color=always

只输出匹配内容的文件名

如果拿到匹配内容的文件名,然后再对文件进行处理,则可以使用-l参数。比如想找到符合条件的文件内容的。

日常的进程查看

日常系统运维监控的时候,我们想看看某个进程是否查看。如果想查看是否有java进程,可以执行如下命令:

ps aux|grep java
# 当然这里也可以用jps

进程的杀死

比如我们重启程序的时候,总需要先判断程序在不在。假设系统有很多个java程序,我们多次进行过滤,然后结合xargs和awk命令进行进程杀死。命令如下:

ps aux|grep java|grep com.shuanghu.App|awk '{print $2}'|xargs kill

awk '{print $2}'表示按空格分割,取第二列,正好是进程号。

查看网络端口号

查看当前系统侦听的所有端口号。命令如下:

netstat -ano|grep LISTEN

debug查看日志

在程序的调试过程中,查看日志,是debug的第一步。如果在日志文件里快速找到需要的日志呢。如果是java语言,则可以使用grep Exception在日志文件里快速定位日志发生的位置。默认grep只显示一行是远远不够的。我们还需要了解bug发生时的上下文,则可以使用grep Exception -C 10查看上下10行的日志。命令如下:

grep Exception -C 10

debug查看动态日志

tail命令是Linux系统提供的一个文件查看命令。tail命令支持-f参数,能够滚动查看文件最新的变化内容。但tail -f只是把文件所有变化内容动态输出。太多的日志,我们是无法进行debug的。那这个时候,grep就能大显身手。我们可以通过管道和grep命令,只显示我们关心的指定包名的动态日志。命令如下:

tail -f 日志.log | grep a.b.c.name

总结

在面对纷扰无序的文本时,如果想快速找到你关心的信息,grep是首选命令。本文先介绍grep基本匹配内容。如果有良好的正则基础,那grep加正则表达式,基本能让你在黑框框里所向披靡,一往无前。

不是经验的经验

在Linux的命令行操作过程中,尤其是grep命令时,我们经常会使用管道|,但由于黑框下,全角和半角的区分不明显。所以下面两个命令看似相同却输出不同。

shuanghu:~ shuanghu$ echo "aa" |grep "aa"
aa
shuanghu:~ shuanghu$ echo "aa" |grep "aa"
aa |grep aa

因为第一个是半角,所以是管道,执行了grep命令;而第二个都成了echo的参数,所以进行了输出。

grep搜索查找命令相关推荐

  1. linux文件搜索查找命令

    linux文件搜索查找命令 1.grep 功能描述 grep 命令在一个或多个文件中查找与指定模式匹配的字符串.如果模式里包含有空格,必须用引号括起来.grep的模式只能是一个被引号括起来的字符串或者 ...

  2. Linux搜索查找命令【详细整理】

    目录 Linux下文件搜索.查找.查看命令 find find [搜索范围][选项] ​ find /home -name 'hello.txt' ​ find /home -user root ​ ...

  3. Linux命令五---搜索查找命令---find-grep-which-whereis等---网络通信命令--ifconfig-netstat等

    版权声明:本文为博主原创文章,未经博主允许不得转载!! 欢迎访问:https://blog.csdn.net/qq_21439395/article/details/82012049 交流QQ: 82 ...

  4. Linux搜索查找命令合集

    目录 find locate grep 和 | find 作用: 将指定目录向下递归地遍历其各个子目录,将满足条件的文件或目录显示在终端. 基本语法: find [搜索范围] [参数] 常用参数: - ...

  5. where is java_Linux下的搜索查找命令的详解(whereis)

    2.whereis 和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库 ...

  6. 【Linux基础】四、常用基本命令——文件权限类(ls -al,chmod,chown,chgrp)、搜索查找类(find,locate,grep,wc,which)

    文件权限命令.搜索查找命令 4.6 ```文件权限类``` 4.6.1 文件属性 4.6.2 chmod 改变权限 4.6.3 chown 改变所有者 4.6.4 chgrp 改变所属组 ```4.7 ...

  7. php m grep event,linux grep (linux查找关键字在php出现的次数)

    http://www.th7.cn/system/lin/201508/127681.shtml 查找CleverCode在当前目录以及子目录,所有的php出现大于0的次数. # find -type ...

  8. linux find 循环查找,Linux下的find查找命令

    Linux下的查找命令有:which(查看可执行文件的位置),whereis(查看指定文件的位置),locate(配合数据库查找指定文件的内容).find(在磁盘上查找文件).grep(使用正则表达式 ...

  9. Linux 命令(一) findgrep文件查找命令

    Linux 命令(一) find&grep文件查找命令 查找命令:find & grep 区别:(1) find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为 ...

最新文章

  1. cve-2017–10271 XMLDecoder 反序列化漏洞 原理分析
  2. 开源:Sagit.Framework For IOS 开发框架
  3. 哈夫曼编码之大根堆小根堆揭西县
  4. 题库练习4(提取不重复的数字、字符个数统计、数字颠倒、字符串反转)
  5. MongoDB 优化器profile
  6. JAVA EE 6 jar包集合_Java EE6将JSF facelets(xhtml)和ManagedBeans打包成JAR
  7. 借助xUnit减少了生产问题
  8. 信息系统项目管理05——项目范围管理
  9. java底层实现分页
  10. 【车间调度】基于matlab粒子群算法求解车间生产调度问题【含Matlab源码 245期】
  11. 计算机考研专业课408什么意思,考研408是什么意思
  12. Centos8上安装中文字符集zh_CN.UTF-8
  13. 深入理解Spring----PostConstruct和PreDestroy
  14. 小学生计算机的起源与发展ppt,计算机的起源与发展历程ppt课件.ppt
  15. Maven基础5:Maven基本概念,仓库配置(在setting中配置本地仓库 和 远程仓库);全局setting和局部setting;
  16. PAT 大区赛 1-7古风排版
  17. iDoctor李旭东:打造管理慢性病的平板电脑
  18. c语言imagesize怎么用里面的参数如何填写,【学习笔记】【C语言】sizeof
  19. java导出mpp格式_tensorflow 模型导出总结
  20. cz3592航班动态_今天起 民航开启冬春季航班计划 上海机场新增通航点23个

热门文章

  1. Java可变参数类型实例
  2. 使用fastjson解析数据后导致顺序改变问题
  3. html滚动效果实现
  4. Adventure项目可视化报表
  5. java map循环删除_map循环删除某个元素
  6. java的后端框架之spring详解篇一(Spring框架基础)
  7. 50道JavaScript基础面试题(附答案)
  8. 感慨:为什么点儿背的总是我?
  9. 自考毕业无计算机成绩,自考成绩全部合格就能拿毕业证书吗
  10. cmd停止nginx服务