说明:

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。工作中我们常常用它来过滤出我们想要的数据。

格式:

grep [OPTIONS]

基本参数:          

  -i    不区分大小写

  -v   排除内容,即取反

  -n    对匹配到的内容打印相应行号

  -E    使用扩展正则表达式(相当于egrep)

  -r    递归读取目录下的文件(即包括子目录下文件)

  -c    对匹配到的行进行计数

  -o    只显示匹配到的内容

  -A    (after)匹配输出内容行并输出内容行后的指定行

  -B    (before)匹配输出内容行并输出内容行前的指定行

  -C    (context)匹配输出内容行并输出内容行的前后指定行

  --color   过滤的内容显示颜色

建议配置别名:

  1. echo alias grep='grep --color' >> /etc/profile //配置别名
  2.  
  3. source /etc/profile //重读文件使别名生效

效果:

  1. [root@vm1 test]# grep ".*" /etc/passwd
  2.  
  3. root:x:0:0:root:/root:/bin/bash
  4.  
  5. bin:x:1:1:bin:/bin:/sbin/nologin
  6.  
  7. daemon:x:2:2:daemon:/sbin:/sbin/nologin

常见用法:

①   grep -ivnEoc… “匹配内容” 文件名

  1. [root@vm1 test]# grep -n "root" /etc/passwd
  2.  
  3. 1:root:x:0:0:root:/root:/bin/bash
  4.  
  5. 11:operator:x:11:0:operator:/root:/sbin/nologin

②   grep -r “匹配内容” 文件目录/*

  1. [root@vm1 ~]# grep -r "www" test/*
  2.  
  3. test/Caiyun.txt:My blog is http://www.cnblogs.com/Caiyundo/
  4.  
  5. test/dudu/3.txt:www.cnblog.com/caiyun

③   grep “匹配内容” -A 指定行 文件名

  1. [root@vm1 ~]# grep "root:x" -nA 5 /etc/passwd
  2.  
  3. 1:root:x:0:0:root:/root:/bin/bash
  4.  
  5. 2-bin:x:1:1:bin:/bin:/sbin/nologin
  6.  
  7. 3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
  8.  
  9. 4-adm:x:3:4:adm:/var/adm:/sbin/nologin
  10.  
  11. 5-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  12.  
  13. 6-sync:x:5:0:sync:/sbin:/bin/sync

④   命令 | grep “匹配内容”

  1. [root@vm1 ~]# ps -ef |grep "sshd"
  2.  
  3. root 1261 1 0 Dec12 ? 00:00:00 /usr/sbin/sshd

扩展:

正则表达式是为处理大量字符串而定义的一套规则和方法,linux正则表达式常用于linux三剑客中。

测试场景模拟(直接复制粘贴即可):

  1. cat >>text.txt<<EOF
  2.  
  3. My name is Caiyun.
  4.  
  5. I like badminton, snooker, running
  6.  
  7. Maybe I'm not a smart person, but I'm working hard.
  8.  
  9. My blog is http://www.cnblogs.com/Caiyundo/
  10.  
  11. Welcome to my blog! CAIYUN
  12.  
  13. My qq is 791111890
  14.  
  15. My mail is Caiyun111111@gmail.com.
  16.  
  17. EOF

一、 基础正则表达式

 ^ 表示以...字符开头,^word

  1. [root@vm1 test]# grep -n "^My" text.txt
  2.  
  3. 1:My name is Caiyun.
  4.  
  5. 5:My blog is http://www.cnblogs.com/Caiyundo/
  6.  
  7. 8:My qq is 791111890
  8.  
  9. 9:My mail is Caiyun111111@gmail.com.

$    表示以...字符结尾,word$

  1. [root@vm1 test]# grep -n "\.$" text.txt
  2.  
  3. 1:My name is Caiyun.
  4.  
  5. 4:Maybe I'm not a smart person, but I'm working hard.
  6.  
  7. 9:My mail is Caiyun111111@gmail.com.

^$ 表示空字符,即可理解为空行

  1. [root@vm1 test]# grep -n "^$" text.txt
  2.  
  3. 3:
  4.  
  5. 7:

.     表示匹配任意单个字符

  1. [root@vm1 test]# grep -n "b." text.txt
  2.  
  3. 2:I like badminton, snooker, running
  4.  
  5. 4:Maybe I'm not a smart person, but I'm working hard.
  6.  
  7. 5:My blog is http://www.cnblogs.com/Caiyundo/
  8.  
  9. 6:Welcome to my blog! CAIYUN

\     表示转义符

  1. [root@vm1 test]# grep -n "\.$" text.txt
  2.  
  3. 1:My name is Caiyun.
  4.  
  5. 4:Maybe I'm not a smart person, but I'm working hard.
  6.  
  7. 9:My mail is Caiyun111111@gmail.com.

*     表示重复前面0个或1个以上字符

  1. [root@vm1 test]# grep -n "bl*" text.txt
  2.  
  3. 2:I like badminton, snooker, running
  4.  
  5. 4:Maybe I'm not a smart person, but I'm working hard.
  6.  
  7. 5:My blog is http://www.cnblogs.com/Caiyundo/
  8.  
  9. 6:Welcome to my blog! CAIYUN

.*    表示匹配所有

  1. [root@vm1 test]# grep -n ".*" text.txt
  2.  
  3. 1:My name is Caiyun.
  4.  
  5. 2:I like badminton, snooker, running
  6.  
  7. 3:
  8.  
  9. 4:Maybe I'm not a smart person, but I'm working hard.
  10.  
  11. 5:My blog is http://www.cnblogs.com/Caiyundo/
  12.  
  13. 6:Welcome to my blog! CAIYUN
  14.  
  15. 7:
  16.  
  17. 8:My qq is 791111890
  18.  
  19. 9:My mail is Caiyun111111@gmail.com.

[]     表示匹配"[]"里面任意单个字符

  1. [root@vm1 test]# grep -n "[791]" text.txt
  2.  
  3. 8:My qq is 791111890
  4.  
  5. 9:My mail is Caiyun111111@gmail.com.

[^]   表示取反"[^]"里面的任意单个字符

  1. [root@vm1 test]# echo Caiyun >> test2.txt
  2.  
  3. [root@vm1 test]# echo 791111890 >> test2.txt
  4.  
  5. [root@vm1 test]# grep -n "[^0-9]" test2.txt
  6.  
  7. 1:Caiyun

[-]   表示匹配"[-]"里一段字符的任意单个字符,如[0-9]即0到9

  1. [root@vm1 test]# grep -n "[0-9]" text.txt
  2.  
  3. 8:My qq is 791111890
  4.  
  5. 9:My mail is Caiyun111111@gmail.com.

1\{4\}     表示匹配字符 "1" 重复4次

  1. [root@vm1 test]# grep -n "1\{4\}" text.txt
  2.  
  3. 8:My qq is 791111890
  4.  
  5. 9:My mail is Caiyun111111@gmail.com.

1\{5,\}    表示匹配字符 "1" 重复5次或5次以上

  1. [root@vm1 test]# grep -n "1\{5,\}" text.txt
  2.  
  3. 9:My mail is Caiyun111111@gmail.com.

1\{,6\}    表示匹配字符 "1" 重复6次和6次以内

  1. [root@vm1 test]# grep -n "1\{,6\}" text.txt
  2.  
  3. 1:My name is Caiyun.
  4.  
  5. 2:I like badminton, snooker, running
  6.  
  7. 3:
  8.  
  9. 4:Maybe I'm not a smart person, but I'm working hard.
  10.  
  11. 5:My blog is http://www.cnblogs.com/Caiyundo/
  12.  
  13. 6:Welcome to my blog! CAIYUN
  14.  
  15. 7:
  16.  
  17. 8:My qq is 791111890
  18.  
  19. 9:My mail is Caiyun111111@gmail.com.

1\{3,5\}  表示匹配字符 "1" 重复3-5次

  1. [root@vm1 test]# grep -n "1\{3,5\}" text.txt
  2.  
  3. 8:My qq is 791111890
  4.  
  5. 9:My mail is Caiyun111111@gmail.com.

二、扩展正则表达式

+     表示重复 "一个或一个以上" 前面的所有字符("*"是0个)

  1. [root@vm1 test]# grep -n "11111*" text.txt
  2.  
  3. 8:My qq is 791111890
  4.  
  5. 9:My mail is Caiyun111111@gmail.com.
  6.  
  7. [root@vm1 test]# grep -n "11111\+" text.txt
  8.  
  9. 9:My mail is Caiyun111111@gmail.com.

?     表示重复 "0个或一个" 前面的字符("."是有且只有1个)

  1. [root@vm1 test]# grep -n "11111." text.txt
  2.  
  3. 9:My mail is Caiyun111111@gmail.com.
  4.  
  5. [root@vm1 test]# grep -n "11111\?" text.txt
  6.  
  7. 8:My qq is 791111890
  8.  
  9. 9:My mail is Caiyun111111@gmail.com.

 |     表示过滤多个字符串

  1. [root@vm1 test]# grep -nE "CAIYUN|mail" text.txt
  2.  
  3. 6:Welcome to my blog! CAIYUN
  4.  
  5. 9:My mail is Caiyun111111@gmail.com.
  6.  
  7. [root@vm1 test]# grep -n "CAIYUN\|mai" text.txt
  8.  
  9. 6:Welcome to my blog! CAIYUN
  10.  
  11. 9:My mail is Caiyun111111@gmail.com.

一般情况下,当我们需要用到扩展正则表达式匹配符时,使用grep要加参数 ”-E” 或用 “\” 转译符转义匹配符

三、元字符

\b    边界字符,单词边界

  1. [root@vm1 test]# grep 'Caiyun' text.txt
  2.  
  3. My name is Caiyun.
  4.  
  5. My blog is http://www.cnblogs.com/Caiyundo/
  6.  
  7. My mail is Caiyun111111@gmail.com.
  8.  
  9. [root@vm1 test]# grep 'Caiyun\b' text.txt
  10.  
  11. My name is Caiyun.

grep的用法还有很多,只要符合规则、逻辑,还可以和很多其他命令配合使用。

PS:要活学活用,多用多练。

Linux三剑客之老三grep的更多相关文章

  1. 第十二章 Linux三剑客之老三—grep

    一.Linux grep 命令用于查找文件里符合条件的字符串. Linux系统中的grep命令是一种功能强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global ...

  2. 性能工具之linux三剑客awk、grep、sed详解

    前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...

  3. Linux 三剑客 -- awk sed grep

    本文由本人收集整理自互联网供自己与网友参考,参考文章均已列出,如有侵权,请告知! 顶配awk,中配sed,标配grep awk 参考 sed 参考 grep 参考 在线查看linux命令速记表 app ...

  4. Linux三剑客及使用介绍

    Linux 三剑客是(grep,sed,awk)三者的简称,熟练使用这三个工具可以提升运维效率.Linux 三剑客以正则表达式作为基础,而在Linux系统中,支持两种正则表达式,分别为"标准 ...

  5. Linux三剑客老三---grep

    1.Linux三剑客老三 过滤需要的内容,例子:grep -v oldboy hello.txt grep一般常用参数: -a:在二进制文件中,以文本文件的方式搜索数据. -c:计算找到"搜 ...

  6. (转)不看绝对后悔的Linux三剑客之grep实战精讲

    不看绝对后悔的Linux三剑客之grep实战精讲 原文:http://blog.51cto.com/hujiangtao/1923675 https://www.cnblogs.com/peida/a ...

  7. Linux三剑客之grep常用参数详细总结

    三剑客grep总结 grep  : Linux三剑客老三      过滤需要的内容 参数: grep一般常用参数: -a :在二进制文件中,以文本文件的方式搜索数据 -c :计算找到 ’ 搜索字符串 ...

  8. Linux三剑客grep、awk、sed

    何为Linux三剑客? 第一个剑客是 grep,grep 会根据正则表达式查找相关内容并打印对应的数据. 第二个剑客是 awk,awk 的名字来源于三个作者的名字简称,它可以根据定位到的数据行处理其中 ...

  9. Linux三剑客grep、awk和sed

    grep,sed 和 awk是Linux/Unix 系统中常用的三个文本处理的命令行工具,称为文本处理三剑客.本文将简要介绍这三个命令并给出基本用法. 管道 在介绍这两个命令之前,有必要介绍一下Uni ...

随机推荐

  1. springBoot服务整合线程池ThreadPoolTaskExecutor与@Async详解使用

    ThreadPoolExecutor:=======这个是java自己实现的线程池执行类,基本上创建线程池都是通过这个类进行的创建.ThreadPoolTaskExecutor:========这个是 ...

  2. Linux线程互斥学习笔记--详细分析

    一.互斥锁 为啥要有互斥? 多个进程/线程执行的先后顺序不确定,何时切出CPU也不确定. 多个进程/线程访问变量的动作往往不是原子的. 1. 操作步骤 (1)创建锁 // 创建互斥锁mutex pth ...

  3. Python爬取COVID-19疫情监控实战

    一.项目概述 本项目基于Python.Flask.Echarts打造的一个疫情监控系统,涉及技术: Python网络爬虫 Python与Mysql数据库交互 使用Flask构建web项目 基于Echa ...

  4. 助你上手Vue3全家桶之Vue3教程

    目录 前言 1,setup 1.1,返回值 1.2,注意点 1.3,语法 1.4,setup的参数 2,ref 创建响应式数据 3,reactive 创建响应式数据 4,computed 计算属性 5 ...

  5. hdu 4788 Hard Disk Drive (水题)

    题意: Input The first line contains an integer T, which indicates the number of test cases. For each t ...

  6. Nessus home版插件更新

    1,进入服务器停止服务 service nessusd stop 2,进入目录执行命令获取Challenge code cd /opt/nessus/sbin/ ./nessuscli fetch - ...

  7. 动手个性化设置自己的 IntelliJ IDEA

    前言 IDEA 是一个智能开发工具,每个开发者的使用习惯不同,如何个性化自己的IDEA? 我们可以通过 Settings 功能来设置. Settings文件是 IDEA 的配置文件,通过它可以设置主题 ...

  8. supervisor安装

    supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中 ...

  9. CentOS8安装VNC-Server,并使用VNC Viewer连接

    1.查看系统信息 # 查看red-hat版本信息 cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) 2.安装VNC Server ...

  10. Spring @Component生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致

    正确注入方式: @Autowired private TFeeMapper TFeeMapper; 错误注入方式 @Autowired private TFeeMapper tFeeMapper; 这 ...