如何使用grep排除模式、文件和目录

自1974年以来,Linuxgrep命令一直在帮助人们查找文件中的字符串。但有时grep过于彻底。这里有几种方法告诉grep忽略不同的事情。...

自1974年以来,Linuxgrep命令一直在帮助人们查找文件中的字符串。但有时grep过于彻底。这里有几种方法告诉grep忽略不同的事情。

grep命令

grep命令搜索文本文件,查找与您在命令行上提供的搜索模式匹配的字符串。grep的强大之处在于它使用正则表达式。这些可以让你描述你正在寻找的东西,而不是必须明确地定义它。

grep的诞生早于Linux。它是20世纪70年代初在Unix上开发的。它的名字取自ed行编辑器中的g/re/p键序列(顺便提一下,发音为“ee-dee”)。这代表全球定期快递搜索,打印匹配行。

grep也许以彻底和专一著称。有时,它会搜索文件或目录,你希望它不要浪费时间,因为搜索结果可能会让你看不到树木中的树木。

How to Use the grep Command on Linux
RELATEDHow to Use the grep Command on Linux

当然,有一些方法可以统治格雷普。您可以告诉它忽略模式、文件和目录,以便grep更快地完成搜索,并且您不会被无意义的误报淹没。

不包括图案

要使用grep进行搜索,可以通过管道从其他进程(如cat)向其输入信息,也可以提供文件名作为最后一个命令行参数。

我们使用了一个短文件,其中包含刘易斯·卡罗尔的《Jabberwocky》这首诗的文本。在这两个示例中,我们搜索与搜索词“Jabberwock”匹配的行

cat jabberwocky.txt | grep "Jabberwock"
grep "Jabberwock" jabberwocky.text

如何使用grep排除模式、文件和目录

为我们列出了包含与搜索线索匹配的行,每行中的匹配元素以红色突出显示。这是简单的搜索。但是,如果我们想排除包含单词“Jabberwock”的行并打印其余的行,该怎么办?

我们可以使用-v(invert-match)选项来实现这一点。这将列出与搜索词不匹配的行。

grep -v "Jabberwock" jabberwocky.text

如何使用grep排除模式、文件和目录

不包含“Jabberwock”的行将列在终端窗口中。

如何使用grep排除模式、文件和目录

我们可以根据自己的意愿排除尽可能多的条款。让我们过滤掉所有包含“Jabberwock”的行以及所有包含“and”的行。为了实现这一点,我们将使用-e(expression)选项。我们需要为我们使用的每个搜索模式使用它。

grep -v -e "Jabberwock" -e "and" jabberwocky.txt

如何使用grep排除模式、文件和目录

输出中的行数也相应减少。

如何使用grep排除模式、文件和目录

如果我们使用-E(扩展正则表达式)选项,我们可以将搜索模式与“|”结合起来,在这里,“|”并不表示管道,而是逻辑OR运算符。

grep -Ev "Jabberwock|and" jabberwocky.txt

如何使用grep排除模式、文件和目录

我们得到了与前一个较长的命令完全相同的输出。

如何使用grep排除模式、文件和目录

如果要使用正则表达式模式而不是显式搜索线索,则命令的格式相同。此命令将排除“ACHT”集合中以任何字母开头的所有行

grep -Ev "^ACHT" jabberwocky.txt

如何使用grep排除模式、文件和目录

要查看包含模式但也不包含其他模式的行,我们可以将grep导入grep。我们将搜索所有包含单词“Jabberwock”的行,然后过滤掉所有还包含单词“slain”的行

grep "Jabberwock" jabberwocky.txt | grep -v "slain"

如何使用grep排除模式、文件和目录

排除文件

我们可以要求grep在文件集合中查找字符串或模式。您可以在命令行中列出每个文件,但对于许多无法扩展的文件。

grep "vorpal" verse-1.txt verse-2.txt verse-3.txt verse-4.txt verse-5.txt verse-6.txt

如何使用grep排除模式、文件和目录

请注意,包含匹配行的文件的名称显示在每行输出的开头。

为了减少键入,我们可以使用通配符。但这可能违反直觉。这似乎有效。

grep "vorpal" *.txt

如何使用grep排除模式、文件和目录

然而,在这个目录中还有其他TXT文件,与诗歌无关。如果我们搜索具有相同命令结构的单词“剑”,我们会得到很多误报。

grep "sword" *.txt

如何使用grep排除模式、文件和目录

我们想要的结果被来自其他扩展名为TXT的文件的大量错误结果所掩盖。

如何使用grep排除模式、文件和目录

单词“vorpal”与任何单词都不匹配,但单词“password”中包含“sw剑”,因此在一些伪日志文件中多次找到它。

我们需要排除这些文件。为此,我们将使用--exclude选项。要排除名为“vol-log-1.txt”的单个文件,我们可以使用以下命令:

grep --exclude=vol-log-1.txt "sword" *.txt

在本例中,我们要排除名称以“vol.”开头的多个日志文件。我们需要的语法是:

grep --exclude=vol*.txt "sword" *.txt

如何使用grep排除模式、文件和目录

当我们使用-R(取消引用递归)选项时,grep将为我们搜索整个目录树。默认情况下,它将搜索这些位置中的所有文件。我们很可能要排除多种类型的文件。

在此测试计算机上的当前目录下,有包含日志文件、CSV文件和MD文件的嵌套目录。这些是我们要排除的所有类型的文本文件。我们可以对每个文件类型使用--exclude选项,但通过对文件类型进行分组,可以更有效地实现我们想要的。

此命令排除所有扩展名为CSV或MD的文件,以及名称以“vol”或“log”开头的所有TXT文件

grep -R --exclude=*.{csv,md} --exclude={vol*,log*}.txt "sword" /home/dave/data/

如何使用grep排除模式、文件和目录

排除目录

如果要忽略的文件包含在目录中,并且这些目录中没有我们要搜索的文件,我们可以排除这些整个目录。

这个概念与排除文件的概念非常相似,只是我们使用--exclude-dir选项并命名要忽略的目录。

grep -R --exclude-dir=backup "vorpal" /home/dave/data

如何使用grep排除模式、文件和目录

我们已经排除了“backup”目录,但仍在搜索另一个名为“backup2”的目录

毫不奇怪,我们可以在一个命令中多次使用--exclude-dir选项。请注意,排除的目录的路径应该相对于搜索将在其中开始的目录给出。不要使用文件系统根目录的绝对路径。

grep -R --exclude-dir=backup --exclude-dir=backup2 "vorpal" /home/dave/data

如何使用grep排除模式、文件和目录

我们也可以使用分组。我们可以通过以下方式更简洁地实现同样的目标:

grep -R --exclude-dir={backup,backup2} "vorpal" /home/dave/data

如何使用grep排除模式、文件和目录

可以在同一命令中组合文件和目录排除。如果要从目录中排除所有文件,并从搜索的目录中排除某些文件类型,请使用以下语法:

grep -R --exclude=*.{csv,md} --exclude-dir=backup/archive "frumious" /home/dave/data

如何使用grep排除模式、文件和目录

有时,这是你遗漏的

有时,使用grep时,感觉就像大海捞针。清除干草堆会有很大的不同。

RELATED:如何在Linux上使用正则表达式(regex)

  • 发表于 2022-10-04 23:03
  • 阅读 ( 23 )
  • 分类:互联网

你可能感兴趣的文章

使用rsync备份数据(无需桌面)

... 我们在过去已经讨论过Grsync,但是知道如何使用为它提供动力的工具(即rsync)可以证明是一项有价值的资产。希望本文将向您演示在没有图形化后端的情况下使用rsync是一项相当简单的任务。 ...

  • 发布于 2021-03-16 12:17
  • 阅读 ( 168 )

如何在linux中使用ls命令

如果您不知道如何使用ls命令,那么获取与存储上的文件相关的详细信息是很困难的。在这里,我们将讨论Linux上与ls命令相关的所有内容,以及它使用的一些不同的标志。 ...

  • 发布于 2021-03-26 18:01
  • 阅读 ( 188 )

启动linux的9个基本命令

... 如何在linux下打开终端 ...

  • 发布于 2021-03-26 18:33
  • 阅读 ( 229 )

如何在linux上使用正则表达式(regex)

...在Linux上做了什么吗?他们给你命令行魔法!我们将教你如何施展正则表达式法术并提升你的命令行技能。 什么是正则表达式(regular expressi***)? 正则表达式(regex)是一种查找匹配字符序列的方法。它们使用字母和符号来定义...

  • 发布于 2021-04-02 11:27
  • 阅读 ( 223 )

如何在linux上使用suid、sgid和sticky位

...权限的人才能访问存储的密码,那么那些没有该权限的人如何更改他们的密码? 提升你的地位 通常,Linux命令和程序运行时与启动程序的人具有相同的权限集。当root运行passwd命令以更改密码时,它将以root的权限运行。这意味着...

  • 发布于 2021-04-02 14:48
  • 阅读 ( 175 )

如何在linux中获得文件或目录的大小

...ls的输出一致,并且与两个字节的文件长度一致。 相关:如何使用ls命令列出Linux上的文件和目录 现在,我们将使用du命令查看文件大小: du geek.txt 上面说是四号,但是四号是什么? 有积木,也有积木 当du以块的形式报告文件...

  • 发布于 2021-04-02 20:13
  • 阅读 ( 132 )

如何使用ls命令列出linux上的文件和目录

...命令之一。也许这是问题的一部分。有这么多的选择,你如何从中筛选出有用的呢?找到它们之后,你怎么记得它们? ls命令及其选项和参数字符串的有用排列是别名的最佳候选。实际上,在大多数发行版中,您认为的“裸”ls...

  • 发布于 2021-04-02 21:28
  • 阅读 ( 230 )

如何在linux上编写fstab文件

...是你在任何地方都看不到你的新硬盘。为什么没有出现?如何让Linux“看到”驱动器以便开始配置它? 实际上,Linux已经看到了您的硬件,但它并没有很快宣布它。或者给你一个提示,它已经找到了你的新硬件。您必须询问Linux...

  • 发布于 2021-04-03 00:45
  • 阅读 ( 157 )

如何在linux上创建别名和shell函数

...才能继续存在。一旦窗口关闭,别名将消失。 那么我们如何使我们的别名永久化呢? .bashrc文件和别名 您可能想知道预打包的别名是在哪里定义的。它位于主文件夹的“.bashrc”文件中。当您启动交互式shell时,将读取此文件并...

  • 发布于 2021-04-03 03:45
  • 阅读 ( 211 )

bash需要知道的15个特殊字符

...我们将向您展示哪些字符是“特殊”或“元”字符,以及如何从功能和字面上使用它们。 ~主目录 波浪号(~)是主目录的缩写。这意味着您不必在命令中键入主目录的完整路径。在文件系统中的任何位置,都可以使用此命令转...

  • 发布于 2021-04-03 03:58
  • 阅读 ( 218 )
manlypolitics
manlypolitics

0 篇文章

相关推荐