详解grep命令的排除功能

grep命令是linux中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 在一个或多个文件中搜素字符串模式,如果字符串模式包括空格,也必须被引用,模式后的所有字符串被看作文件名。搜索的结果被送到标准输出(stdout),不影响原文件内容。

排除单词或多个条件

要仅显示与搜索模式不匹配的行,请使用-v选项。例如,显示不包含nologin的行,使用下面命令:

[root@localhost ~]# grep -wv nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bob:x:1000:1000::/home/bob:/bin/bash
user01:x:1001:1001::/home/user01:/bin/bash
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash

-w选项告诉 grep 仅返回-w选项后面包含单词的行。

默认情况下grep 区分大小写。这意味着大写和小写字符被视为不同的。若要在搜索时忽略大小写,请使用-i 选项调用 grep。

如果搜索字符串中包含空格,则需要将内容放在单引号或者双引号内。

若要排除两个或多个搜索条件,请使用-e选项,可根据需要多次使用-e选项:

[root@localhost ~]# grep -wv -e nologin -e bash /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

排除多个搜索条件的另一个方式是使用运算符 |,以下示例打印不包含字符串nologinbash的行:

[root@localhost ~]# grep -wv 'nologin\|bash' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

还可以使用扩展正则表达式,使用选项 -E会后,运算符|就不需要被转义了,如下图:

[root@localhost ~]# grep -Ewv 'nologin|bash' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

下面一个实例,是排除/etc/ssh/sshd_config配置文件中的以#和 空格 开头的行:

[root@localhost ~]# cat /etc/ssh/sshd_config |grep -Ev '(^#|^$)'

下面的实例,要打印出系统上所有正在运行的进程,除了以“root”用户身份运行的进程:

[root@localhost ~]# ps -ef|grep -wv root

排除目录或文件

要从grep搜索中排除目录,请使用--exclude-dir选项。排除目录的路径是相对于后面指定的搜索目录。

下面实例,显示如何在/etc目录中的所有文件中搜索单词keys,不包括 /etc/pki 目录:

[root@localhost ~]# grep -Rw --exclude-dir=pki keys /etc/

要排除多个目录,请将排除的目录括在大括号中,并使用逗号分隔,不要有空格。

例如,要在系统中查找包含字符串 gnu 的文件,不包括 proc、boot 和 sys 目录,需要运行下面命令:

[root@localhost ~]# grep -r --exclude-dir={proc,boot,sys} gnu /

下面实例,使用--exclude选项排除多个文件,我们在当前工作目录中搜索字符串 linuxprobe,不包括以 .png 和 .jpg 结尾的文件:

[root@localhost ~]# grep -rl --exclude=*.{png,jpg} linuxprobe *

总结

grep 是一种强大的命令行工具,用于在一个或多个输入文件中搜索与正则表达式匹配的行,并将匹配的行标准输出。在本文中介绍如何在使用 grep 搜索时排除一个或多个单词或目录。

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/4396.html

(0)
晴川运维晴川运维
上一篇 2025年6月8日
下一篇 2025年6月8日

相关推荐

  • nginx常用操作有那些?

    Nginx 是一款面向性能设计的 HTTP 服务器,相较于 Apache、lighttpd 具有占有内存少,稳定性高等优势,下面为大家分享一下nginx常用操作。 nginx启动,…

    Linux系统 2025年10月10日
  • 详解MySQL 慢查询

    慢查询日志用来记录在 MySQL 中执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率低,以便进行优化,下面为大家详细讲解一下 MySQL 慢查询。 …

    Linux系统 2025年9月17日
  • Linux下生成高强度密码具体方法

    现在信息泄露越来越严重,而强大的密码是防止个人敏感信息泄露的第一步,本篇文章重点为大家讲解一下Linux下生成高强度密码具体方法。 1. 在 Linux 中使用 OpenSSL 来…

    Linux系统 2025年10月20日
  • Linux下查看文件内容具体方法

    Linux下查看文件内容有多种方法,可以使用:cat、tac、nl、more等命令,下面详细的讲解一下各个命令的具体使用方法。 cat 由第一行开始显示文件内容 语法: cat&n…

    Linux系统 2025年6月8日
  • Linux中常用的网络嗅探工具

    在计算机网络中,数据是暴露的,因为数据包传输是无法隐藏的,所以让我们来使用 whois、dig、nmcli和 nmap 这四个工具来嗅探网络吧。 请注意,不要在不属于自己的网络上运…

    Linux系统 2025年9月22日
  • Linux终端中实现大小写字符转换

    Linux终端中提供了一些可以大小写之间转换文本的命令,通过这些命令可以提高我们的工作效率,本篇文章重点为大家讲解一下Linux终端中进行大小写字符转换具体方法。 环境 Cento…

    Linux系统 2025年6月11日
  • Linux中安装和使用Cpufetch

    Cpufetch是一款功能强大的CPU架构信息获取工具,该工具支持x86、x86_64(Intel和AMD)以及ARM架构的CPU。Cpufetch支持在Linux、Windows…

    Linux系统 2025年6月8日
  • 开源日志库Logger进阶使用方法

    日志对于开发来说是非常重要的,不管是调试数据查看、bug问题追踪定位、数据信息收集统计,日常工作运行维护等等,都大量的使用到。今天介绍著名开源日志库Logger的使用,库的地址:h…

    Linux系统 2025年6月15日
  • Linux内核增加HDF驱动子系统

    HDF驱动子系统是OpenHarmony重要的特色功能之一,其主要的功能是实现驱动程序在多内核多平台的物联网环境,实现一次驱动开发,多端部署。之前移植OHOS3.0使用了传统的li…

    Linux系统 2025年6月8日
  • 以源码的方式讲解一下Rarp协议

    rarp是通过mac地址查询ip的协议,主要用于有mac的主机,但是没有ip的情况。 rarp协议的格式和arp协议是一样的,他们都是通过一种地址查询另外一种地址。操作系统内维护了…

    Linux系统 2025年10月19日

发表回复

登录后才能评论