转自:https://linux.cn/article-5453-1.html

编译自:http://www.linuxtechi.com/linux-grep-command-with-14-different-examples/ 作者: Pradeep Kumar
原创:LCTT https://linux.cn/article-5453-1.html
译者: cvsher
本文地址:https://linux.cn/article-5453-1.html

2015-5-17 08:10   
评论: 8 收藏: 16

概述:

所有的类linux系统都会提供一个名为grep(global regular expression print,全局正则表达式输出)的搜索工具。grep命令在对一个或多个文件的内容进行基于模式的搜索的情况下是非常有用的。模式可以是单个字符、多个字符、单个单词、或者是一个句子。

当命令匹配到执行命令时指定的模式时,grep会将包含模式的一行输出,但是并不对原文件内容进行修改。

在本文中,我们将会讨论到14个grep命令的例子。

例1 在文件中查找模式(单词)

在/etc/passwd文件中查找单词“linuxtechi”

  1. root@Linux-world:~# grep linuxtechi /etc/passwd
  2. linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
  3. root@Linux-world:~#

例2 在多个文件中查找模式。

  1. root@Linux-world:~# grep linuxtechi /etc/passwd /etc/shadow /etc/gshadow
  2. /etc/passwd:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
  3. /etc/shadow:linuxtechi:$6$DdgXjxlM$4flz4JRvefvKp0DG6re:16550:0:99999:7:::/etc/gshadow:adm:*::syslog,linuxtechi
  4. /etc/gshadow:cdrom:*::linuxtechi
  5. /etc/gshadow:sudo:*::linuxtechi
  6. /etc/gshadow:dip:*::linuxtechi
  7. /etc/gshadow:plugdev:*::linuxtechi
  8. /etc/gshadow:lpadmin:!::linuxtechi
  9. /etc/gshadow:linuxtechi:!::
  10. /etc/gshadow:sambashare:!::linuxtechi
  11. root@Linux-world:~#

例3 使用-l参数列出包含指定模式的文件的文件名。

  1. root@Linux-world:~# grep -l linuxtechi /etc/passwd /etc/shadow /etc/fstab /etc/mtab
  2. /etc/passwd
  3. /etc/shadow
  4. root@Linux-world:~#

例4 使用-n参数,在文件中查找指定模式并显示匹配行的行号

  1. root@Linux-world:~# grep -n linuxtechi /etc/passwd
  2. 39:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
  3. root@Linux-world:~#
  1. root@Linux-world:~# grep -n root /etc/passwd /etc/shadow

例5 使用-v参数输出不包含指定模式的行

输出/etc/passwd文件中所有不含单词“linuxtechi”的行

  1. root@Linux-world:~# grep -v linuxtechi /etc/passwd

例6 使用 ^ 符号输出所有以某指定模式开头的行

Bash脚本将 ^ 符号视作特殊字符,用于指定一行或者一个单词的开始。例如输出/etc/passes文件中所有以“root”开头的行

  1. root@Linux-world:~# grep ^root /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash
  3. root@Linux-world:~#

例7 使用 $ 符号输出所有以指定模式结尾的行。

输出/etc/passwd文件中所有以“bash”结尾的行。

  1. root@Linux-world:~# grep bash$ /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash
  3. linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
  4. root@Linux-world:~#

Bash脚本将美元($)符号视作特殊字符,用于指定一行或者一个单词的结尾。

例8 使用 -r 参数递归地查找特定模式

  1. root@Linux-world:~# grep -r linuxtechi /etc/
  2. /etc/subuid:linuxtechi:100000:65536
  3. /etc/group:adm:x:4:syslog,linuxtechi
  4. /etc/group:cdrom:x:24:linuxtechi
  5. /etc/group:sudo:x:27:linuxtechi
  6. /etc/group:dip:x:30:linuxtechi
  7. /etc/group:plugdev:x:46:linuxtechi
  8. /etc/group:lpadmin:x:115:linuxtechi
  9. /etc/group:linuxtechi:x:1000:
  10. /etc/group:sambashare:x:131:linuxtechi
  11. /etc/passwd-:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
  12. /etc/passwd:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
  13. ............................................................................

上面的命令将会递归的在/etc目录中查找“linuxtechi”单词

例9 使用 grep 查找文件中所有的空行

  1. root@Linux-world:~# grep ^$ /etc/shadow
  2. root@Linux-world:~#

由于/etc/shadow文件中没有空行,所以没有任何输出

例10 使用 -i 参数查找模式

grep命令的-i参数在查找时忽略字符的大小写。

我们来看一个例子,在paswd文件中查找“LinuxTechi”单词。

  1. nextstep4it@localhost:~$ grep -i LinuxTechi /etc/passwd
  2. linuxtechi:x:1001:1001::/home/linuxtechi:/bin/bash
  3. nextstep4it@localhost:~$

例11 使用 -e 参数查找多个模式

例如,我想在一条grep命令中查找‘linuxtechi’和‘root’单词,使用-e参数,我们可以查找多个模式。

  1. root@Linux-world:~# grep -e "linuxtechi" -e "root" /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash
  3. linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
  4. root@Linux-world:~#

例12 使用 -f 用文件指定待查找的模式

首先,在当前目录中创建一个搜索模式文件“grep_pattern”,我想文件中输入的如下内容。

  1. root@Linux-world:~# cat grep_pattern
  2. ^linuxtechi
  3. root
  4. false$
  5. root@Linux-world:~#

现在,试试使用grep_pattern文件进行搜索

  1. root@Linux-world:~# grep -f grep_pattern /etc/passwd

例13 使用 -c 参数计算模式匹配到的数量

继续上面例子,我们在grep命令中使用-c命令计算匹配指定模式的数量

  1. root@Linux-world:~# grep -c -f grep_pattern /etc/passwd
  2. 22
  3. root@Linux-world:~#

例14 输出匹配指定模式行的前或者后面N行

a)使用-B参数输出匹配行的前4行

  1. root@Linux-world:~# grep -B 4 "games" /etc/passwd

b)使用-A参数输出匹配行的后4行

  1. root@Linux-world:~# grep -A 4 "games" /etc/passwd

c)使用-C参数输出匹配行的前后各4行

  1. root@Linux-world:~# grep -C 4 "games" /etc/passwd


via: http://www.linuxtechi.com/linux-grep-command-with-14-different-examples/

作者:Pradeep Kumar 译者:cvsher 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

14 个 grep 命令的例子 【转】的更多相关文章

  1. Linux输入输出重定向和文件查找值grep命令

    Linux输入输出重定向和文件查找值grep命令 一.文件描述符Linux 的shell命令,可以通过文件描述符来引用一些文件,通常使用到的文件描述符为0,1,2.Linux系统实际上有12个文件描述 ...

  2. Linux中通过grep命令检索文件内容和指定内容前后几行

    原文链接: https://www.linuxidc.com/Linux/2017-11/148390.htm Linux系统中搜索.查找文件中的内容,一般最常用的是grep命令,另外还有egrep命 ...

  3. Ubuntu 14.10 下grep命令详解

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  4. Linux中grep命令的12个实践例子

    grep是每个Linux发行版都预装的一个强有力的文件模式搜索工具.无论何种原因,如果你的系统没有预装它的话,你可以很容易的通过系统的包管理器来安装它(Debian/Ubuntu系中的apt-get和 ...

  5. grep命令的or,and,not操作的例子

    在Linux的grep命令中如何使用OR,AND,NOT操作符呢? 其实,在grep命令中,有OR和NOT操作符的等价选项,但是并没有grep AND这种操作符.不过呢,可以使用patterns来模拟 ...

  6. Linux 中 grep 命令的 12 个实践例子

    2017-10-17 Linux小管家 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一个强有力的文件 ...

  7. grep 命令详解

    [root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 选项与参数: -a :将 binary 文件以 text 文件的方式搜寻数据 - ...

  8. liunx 的 grep命令(转载)

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  9. Linux之grep命令详解

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

随机推荐

  1. java中 set,list,array(集合与数组)相互转换

      public static Object[] List2Array(List<Object> oList) { Object[] oArray = oList.toArray(new ...

  2. javascript实例学习之四——javascript分页

    话不多少,直接上代码 html代码: <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  3. switch为什么不能用string类型?

    switch()括号里面的参数是一个int型值啊  你要可以转换为int型的参数才行得通啊

  4. pg_rewind 介绍

    pg_rewind—使一个PostgreSQL数据目录与另一个数据目录(该目录从第一个PostgreSQL数据目录创建而来)一致. 描述 pg_rewind是一个在集群的时间线参数偏离之后,用于使一个 ...

  5. css 固定表头的表格,和 width:auto, margin:auto等 自计算方法

    实现思路: 外层用一个table,里面写好Header,然后里面再写一个table里面写好header.然后自己控制overflow的值使内部的tablemargin-top和外层的行高一致就可以实现 ...

  6. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Python学习总结11:获取当前运行类名和函数名

    一. 使用内置方法和修饰器方法获取类名.函数名 1. 外部获取 从外部的情况好获取,可以使用指向函数的对象,然后用__name__属性. def a(): pass a.__name__ 或者 get ...

  8. Java基础(53):内部类(转)

    java中的内部类总结 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行 ...

  9. 关于vptr指针初始化的分步

    vptr:一个具有虚函数类的对象所具有的隐藏的成员,指向该类的虚函数表. 父类对象的vptr指向是一直指向父类的.但子类的vptr指针最终是指向子类的, 当子类创建的时候,先调用父类构造函数,这个时候 ...

  10. ACdream 1104 瑶瑶想找回文串(SplayTree + Hash + 二分)

    Problem Description 刚学完后缀数组求回文串的瑶瑶(tsyao)想到了另一个问题:如果能够对字符串做一些修改,怎么在每次询问时知道以某个字符为中心的最长回文串长度呢?因为瑶瑶整天只知 ...