如何在 Grep 中排除

2022年 10月 12日 97.5k 0

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

在本文中,我们将向您展示如何在使用 搜索时排除一个或多个单词、模式或目录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
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

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

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

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

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

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

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

排除多个搜索模式的另一个选项是使用 OR 运算符连接模式|。

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

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

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

如果你使用扩展正则表达式选项-E,那么操作符|不应该被转义,如下所示:

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

您可以指定不同的可能匹配项,可以是文字字符串或表达式集。在以下示例中,字符串games出现在行首的行被排除在外:

grep -v "^games" file.txt

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

例如,要打印系统上所有正在运行的进程,除了那些以用户“root”运行的进程,您可以过滤ps 命令的输出:

ps -ef | grep -wv root

排除目录和文件

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

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

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

linuxize下面是一个示例,展示了如何在 中的所有文件中搜索字符串/etc,不包括/etc/pki目录:

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

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

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

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

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

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

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

结论

该grep命令允许您在搜索文件时排除模式和目录。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论