myfreax

Linux grep排除过滤输出

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

4 min read
By myfreax
Linux grep排除过滤输出

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

在本教程中,我们将向您展示如何使用grep对输出进行过滤,排除 。这其中包括排除不匹配的行,排除目录和文件等。

要仅打印与搜索模式不匹配的行,可以使用grep的-v--invert-match选项。进行反转的匹配。

注意grep会区分大小写。这意味着大写和小写被视为不同的字符。要在搜索时忽略大小写,使用-i选项调用grep

如果搜索字符串包含空格,只需要将其括在单引号或双引号中。grep即会搜索空格,你也可以使用正则表达式表示空格的匹配。

如果你需要在搜索进程的时候排除自身的进程,你可以grep的-v选项。例如命令ps aux | grep fnord | grep -v grep将会排除自身的进程。

反转匹配

例如命令grep -wv nologin /etc/passwd将会要打印不包含nologin行。这里我们使用-w选项告诉grep仅返回指定字符串是整个单词的那些行。

你还可以使用-e选项同时反转匹配多个模式,例如命令grep -wv -e nologin -e bash /etc/passwd将会同时反转两个匹配模式。

排除多个搜索模式的另一个选项是使用OR运算符|。例如命令grep -wv 'nologin\|bash' /etc/passwd命令打印不包含字符串nologinbash 的行。

GNUgrep支持三种正则表达式语法,Basic、Extended和Perl-compatible。默认情况下,grep将模式解释为Basic正则表达式。

当你在正则表达式中使用使用OR运算符|时,必须使用反斜杠\进行转义。因为shell会将|解释Linux管道。

如果你使用的扩展正则表达式,则|不不需要转义,即不需要反斜杠\-E选项指示grep使用扩展正则表达式。

例如命令grep -Ewv 'nologin|bash' /etc/passwdgrep -wv 'nologin\|bash' /etc/passwd是等效的,前者使用的是扩展表达式,后者使用基本正则表达式。

排除目录和文件

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

-r-R选项之间的主要区别在于,当使用大写字母R调用grep时,它将追踪所有符号链接文件。

grep的--exclude-dir选项允许你要从搜索中排除多个文件与目录。排除目录的路径是相对于搜索的起始目录。

grep -R --exclude-dir=pki myfreax /etc命令将会在/etc目录中搜索包含字符串myfreax的文件,但不包括/etc/pki目录。

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

grep -r --exclude-dir={proc,boot,sys} gnu /命令将会在你的Linux系统的根目录/ 开始搜索包含字符串GNU的文件,并且排除procbootsys目录。

使用通配符匹配时,您可以使用--exclude选项并指定的GLOB来排除不需要结果。

grep -rl --exclude=*.{png,jpg} myfreax *命令将会在当前工作目录中搜索包含字符串myfreax的文件,但不包括以.png.jpg目录结尾的文件。

结论

grep命令允许您在搜索文件时排除模式和目录。如果您有任何问题或反馈,请随时发表评论。

Related Articles