云网牛站
所在位置:首页 > Linux命令 > 在Linux系统中用grep命令排除单词和模式、及排除目录和文件

在Linux系统中用grep命令排除单词和模式、及排除目录和文件

2021-05-19 15:18:44作者:吴弈达稿源:云网牛站

在本文中,我们将向您展示在使用grep搜索时如何排除一个或多个单词,模式或目录。内容有:排除单词和模式、及排除目录和文件。

在Linux系统中用grep命令排除单词和模式、及排除目录和文件

 

前言

grep是一种功能强大的命令行工具,用于在一个或多个输入文件中搜索与正则表达式匹配的行,并将每条匹配的行写入标准输出。

参考:在Linux系统下使用grep命令搜索文件的详细用法

 

排除单词和模式

要仅显示与搜索模式不匹配的行,请使用-v(或--invert-match)选项。

例如,要打印不包含字符串nologin的行,可以使用:

grep -wv nologin /etc/passwd

返回:

root:x:0:0:root:/root:/bin/bash

git:x:994:994:git daemon user:/:/usr/bin/git-shell

ywnz:x:1000:1000:ywnz:/home/ywnz:/bin/bash

-w选项告诉grep仅返回指定字符串是整个单词(由非单词字符括起来)的那些行。

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

如果搜索字符串包含空格,则需要将其用单引号或双引号引起来。

要指定两个或多个搜索模式,请使用-e选项:

grep -wv -e nologin -e bash /etc/passwd

您可以根据需要多次使用-e选项。

排除多个搜索模式的另一种选择是使用OR运算符|来加入模式。

以下示例显示不包含字符串nologin或bash的行:

grep -wv 'nologin\|bash' /etc/passwd

GNU grep支持三种正则表达式语法,Basic、Extended和Perl兼容。默认情况下,grep将模式解释为基本的正则表达式,其中的元字符(例如|)失去其特殊含义,您必须使用其反斜线版本。

如果使用扩展的正则表达式选项-E,那么运算符|不应逃脱,如下所示:

grep -Ewv 'nologin|bash' /etc/passwd

您可以指定不同的可能匹配项,这些匹配项可以是文字字符串或表达式集。在下面的示例中,排除了字符串游戏在行的开始处发生的行:

grep -v "^games" file.txt

可以使用grep通过管道过滤命令的输出,并且只有与给定模式匹配的行才会打印在终端上。

例如,要打印出系统上所有正在运行的进程(以用户“root”身份运行的进程除外),可以过滤ps命令的输出:

ps -ef | grep -wv root

 

排除目录和文件

有时,当使用-r或-R选项执行递归搜索时,您可能希望从搜索结果中排除特定目录。

-r或-R选项之间的主要区别在于,当使用大写R调用grep时,它将跟随所有符号链接。

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

这是一个示例,显示了如何在/etc内的所有文件(不包括/etc/pki目录)中搜索字符串ywnz:

grep -R --exclude-dir=pki ywnz /etc

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

例如,要在Linux系统中查找包含字符串“gnu”的文件(不包括proc、boot和sys目录),请运行:

grep -r --exclude-dir={proc,boot,sys} gnu /

使用通配符匹配时,可以排除基本名称与--exclude选项中指定的GLOB匹配的文件。

在下面的示例中,我们正在搜索当前工作目录中的所有文件以查找字符串ywnz,但不包括以.png和.jpg目录结尾的文件:

grep -rl --exclude=*.{png,jpg} ywnz *

 

结论

在Linux系统中使用grep命令可以在搜索文件时排除模式和目录,实现起来也简单。

 

相关主题

Linux下的Grep多种模式和Grep多个字符串

Linux命令子频道
精选文章
热门文章