在本文中,我们将向您展示在使用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命令可以在搜索文件时排除模式和目录,实现起来也简单。
相关主题 |