如何使用 grep 排除一个词

macOS 中的终端

grep 命令行工具对于在文本数据中搜索与定义的字符串、字符、单词或正则表达式匹配的行和片段非常有用。虽然 grep 的大多数用途是为语法匹配对数据进行排序,但如果您希望使用 grep 排除单词或字符串,该怎么办?使用 grep 排除行匹配与在 grep 中查找和打印匹配一样有用,所以让我们介绍如何使用 grep 排除字符串匹配和排除单词。

显然,您需要有一些命令行经验并接触过 grep 才能发现它很有用。如果你想继续,你可以打开终端应用程序并亲自尝试一下。由于 grep 是一个与操作系统无关的实用程序,您可以在 Mac OS、Linux、unix 或任何其他使用 grep 的系统中使用排除技巧。

如何使用 grep 排除单个单词

排除具有字符串或语法匹配的行的最简单方法是使用 grep 和 -v 标志。

例如,假设我们在命令行使用 cat 打印文件,但我们想排除所有包含术语“ThisWord”的行,则语法如下所示:

<代码>cat example.txt | grep -v “ThisWord”

输出将是 example.txt 文本文件,但不包括任何包含与“ThisWord”匹配的字符串的行。

您还可以直接在文件上使用 grep 并根据单词或语法排除行匹配,如下所示:

grep -v "ThisWord" example.txt

使用最适合您的特定工作流程的那个。

如何使用 grep 排除多个字符串或单词

既然您知道如何排除单个单词的匹配项,下一个显而易见的问题是关于使用 grep 排除多个单词。这同样简单,有几种不同的方法可以使用 -v 标志和 -e 标志来完成此操作。

首先让我们以上面的例子为例,在通过管道传输到 grep 的文件上使用 cat,并排除任何匹配两个单词的行; “Word1”和“Word2”,如下所示:

<代码>cat example.txt | grep -v -e “Word1” -e “Word2”

任何包含“Word1”或“Word2”的行都将从打印结果中排除。

您也可以像以前一样直接对文件使用 grep:

grep -v -e "Word1" -e "Word2" example.txt

另一种方法是通过使用管道分隔每个匹配项来分隔要用 grep 排除的内容,如下所示:

grep -Ev "word1|word2" 示例.txt

如果您在示例文本文件上测试这些选项中的任何一个,您会发现无论采用何种方法,输出都是相同的,每个都排除了包含目标短语、语法、单词或文本匹配的行。

太好了,给我看一个使用 grep 排除数据的有用示例!

对于高级 Mac 用户可能会觉得有用的实际示例,我们可以在 打印和查询命令行历史记录以查找以前执行的命令以查找默认匹配项,但从输出中排除一些选定的默认字符串。

在此示例中,我们将打印默认字符串匹配的命令历史记录,但排除与“com.apple.itunes”定义的 iTunes 相关的任何匹配:

历史 |grep "defaults write" |grep -v -e "com.apple.itunes"

因此,如果您一直在关注,这将报告“默认写入”命令的所有历史执行情况,但不包括与 iTunes 应用程序相关的任何内容。不错吧?

如果您有任何使用 grep 排除匹配的特别方便的用法,请在下面的评论中与我们分享!如果您喜欢这篇文章,您几乎肯定会喜欢在这里浏览我们的许多命令行文章,其中还有很多学习!