Grep命令详解-9个经典使用场景

Grep命令详解-9个经典使用场景Grep 全称 GlobalRegula 表示全局正则表达式是一个强大的文本搜索工具 采用正则匹配

Grep

全称Global Regular Expression Print,表示全局正则表达式
是一个强大的文本搜索工具,采用正则匹配
1、命令格式
grep [options] files

2、主要参数
-c: 只输出匹配行的数目
-i: 不区分大小写
-n:显示匹配航以及行号
-l:查询多文件的时候只输出包含匹配字符的文件名
-v:反向匹配,即显示不匹配的行
-h: 查询的时候不适用文件名
-s:不显示错误信息

3、部分正则表达式
\     反义字符:如”\”\””表示匹配””
^$ 开始和结束
[] 单个字符,[A]
[ – ] 匹配一个范围,[0-9a-zA-Z]匹配所有数字和字母
* 前面的字符出现0次或者多次
+ 前面的字符出现了一次或者多次
. 任意字符

4、经典场景

除非要精确区分大小写,否则请加上-i来忽略大小写

(1)结合find命令和管道
  你的一个音乐文件夹里有多种格式的文件,而你只想找到艺术家jay的mp3文件,并且不含有任何的混合音轨

[root@localhost ~]#find . -name ".mp3" | grep -i jay | grep -vi "remix"

分析: 1)使用find -name 来列出所有mp3文件,重定向给grep
2) 使用grep -i 来查找包含jay的行
3)使用grep -vi 来查找不包含remix的行

(2)-A -B -C
  很多时候,我们并关心匹配行而是关心匹配行的上下文。这时候-A -B -C就有用了
-A n 后n行,A记忆为(After)
-B n 前n行,B记忆为(Before)
-C n 前n行,后n行,C记忆为(Center)
举例

[root@localhost ~]# ifconfig | grep -A 2 "Link encap" eth0 Link encap:Ethernet HWaddr 00:0C:29:F3:38:15 inet addr:192.168.91.129 Bcast:192.168.91.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fef3:3815/64 Scope:Link -- lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host [root@localhost ~]# ifconfig | grep -C 2 "lo" Interrupt:67 Base address:0x2024 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host

(3) 用-c来统计数目
  你手头有一个很大的文件,这个文件包含网址,比如www.baidu.com tieba.baidu.com等等。你想要知道有多少个隶属于百度的网址
[

root@localhost ~]# grep -c "*baidu.com*" filename 例子 [root@localhost ~]# cat file.txt wtmp begins Mon Feb 24 14:26:08 2014 192.168.0.1 162.12.0.123 "123" 123""123   123 www.baidu.com tieba.baidu.com www.google.com www.baidu.com/search/index [root@localhost ~]# grep -cn ".*baidu.com.*" file.txt 3

(4) -r 递归查找子目录
  查找当前目录极其子目录下面包含匹配字符的文件
查找子目录,匹配后输出行号,这里的点表示当前目录

[root@localhost ~]# grep -nr HELLO_HWC_CSND_BLOG* .

例子:

[root@localhost ~]# grep -nr baidu . ./file.txt:8:www.baidu.com ./file.txt:9:tieba.baidu.com ./file.txt:11:www.baidu.com/search/index ./test/test.txt:1:http://www.baidu.com 

查找子目录,匹配后只输出文件名
[root@localhost ~]# grep -lr HELLO_HWC_CSND_BLOG* .

例子:

[root@localhost ~]# grep -lr baidu . ./file.txt ./test/test.txt 

(5)–line-buffered 打开buffering 模式
  你有一个文件是动态的,它不断地添加信息到文件的尾部,而你想要输出包含某些信息的行。即持续的grep一个动态的流

[root@localhost ~]#tail -f file | grep –line-buffered your_pattern 

(6)结合ps查找进程

[root@localhost ~]# ps aux | grep init root 1 0.0 0.1 2072 632 ? Ss 22:52 0:01 init [5] root 4210 0.0 0.1 6508 620 ? Ss 23:01 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients" root 4233 0.0 0.0 2780 504 ? S 23:01 0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients root 4956 0.0 0.1 3920 680 pts/1 R+ 23:27 0:00 grep init

这里我们看到了grep init我们执行的命令也被列出来了
如果不想要这一行,我们可以这么改命令

[root@localhost ~]# ps aux | grep [i]nit root 1 0.0 0.1 2072 632 ? Ss 22:52 0:01 init [5] root 4210 0.0 0.1 6508 620 ? Ss 23:01 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients" root 4233 0.0 0.0 2780 504 ? S 23:01 0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients

(7)查找不包含某一个目录
[root@localhost ~]#grep -R –exclude-dir=node_modules ‘some pattern’ /path/to/search

例子

[root@localhost ~]# ls anaconda-ks.cfg Desktop file.txt find.result install.log install.log.syslog test [root@localhost ~]# grep -r baidu . ./file.txt:www.baidu.com ./file.txt:tieba.baidu.com ./file.txt:www.baidu.com/search/index ./test/test.txt:http://www.baidu.com

这时候如果我们不想包含test目录

[root@localhost ~]# grep -R --exclude-dir=text "baidu" . ./file.txt:www.baidu.com ./file.txt:tieba.baidu.com ./file.txt:www.baidu.com/search/index

如果报错

grep: unrecognized option `--exclude-dir=test' 

说明版本过老,更新下就ok

(8)查找IP地址
这里用到了-o和-P命令
我们通过man grep查看
-o, –only-matching:
              Show only the part of a matching line that matches PATTERN.
-P, –perl-regexp:
              Interpret PATTERN as a Perl regular expression.
也就是说-o,只显示匹配行中匹配正则表达式的那部分
-P,作为Perl正则匹配

[root@localhost ~]# cat file.txt wtmp begins Mon Feb 24 14:26:08 2014 192.168.0.1 162.12.0.123 "123" 123""123   123 www.baidu.com tieba.baidu.com www.google.com www.baidu.com/search/index [root@localhost ~]# grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" file.txt 192.168.0.1 162.12.0.123 

(9)查找邮箱

[root@localhost ~]# grep -oP “[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+” file.txt


例子

[root@localhost ~]# cat file.txt wtmp begins Mon Feb 24 14:26:08 2014 192.168.0.1 162.12.0.123 "123" 123""123   123 www.baidu.com tieba.baidu.com www.google.com www.baidu.com/search/index [root@localhost ~]# grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txt   





























































































































































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178545.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午5:03
下一篇 2026年3月26日 下午5:03


相关推荐

  • SpringCloud-Alibaba-Sentinel-服务降级-热点限流-服务熔断

    SpringCloud-Alibaba-Sentinel-服务降级-热点限流-服务熔断前言:除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方API等。例如,支付的时候,可能需要远程调用银联提供的API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用熔断策略Sentinel提供

    2022年6月12日
    28
  • 操作系统思维导图—(零基础—思维导图详细版本及知识点)

    操作系统思维导图—(零基础—思维导图详细版本及知识点)第一章操作系统引论及概述 1 操作系统 OperatingSys OS 是计算机系统中最重要的系统软件 它管理整个计算机系统的软件资源和硬件资源 是用户与计算机硬件的桥梁 是其它软件和程序的运行基础 2 操作系统可以控制 CPU 的工作 访问存储器 进行设备驱动和设备中断处理 3 计算机用户可以通过操作系统使用不同的界面 方便 快捷 安全 可靠地操作计算机硬件来完成自己的计算任务 4 操作系统是管理和控制计算机硬件与软件资源的计算机程序 是直接运行在 裸机 上的最基本的系统软件 任何其他软

    2026年3月18日
    3
  • Windows Socket 最大连接数

    Windows Socket 最大连接数

    2022年3月12日
    45
  • webstorm激活码永久2021_通用破解码

    webstorm激活码永久2021_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    376
  • “悟空”出世!大厂AI智能体迈入规模商用

    “悟空”出世!大厂AI智能体迈入规模商用

    2026年3月19日
    2
  • Pycharm使用pyinstaller打包成64/32位通用exe

    Pycharm使用pyinstaller打包成64/32位通用exe网上大多数博客都是行不通的 在此记录一个可行的快捷方式 下载 32 位 python 安装包 点击安装 选择第二种自定义方式安装 默认 填写自己的安装路径 安装完成 PycharmSetti 设置 ShowAll 点击 选择 existingenvi 选择 Python32 位安装路径 设置好后需要安装 pyinstaller 库 点击右边 号 安装 pyinstaller 完成 回到项目 对报红缺失的依

    2025年7月26日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号