命令行快速提示:使用 grep 搜索

如果你使用你的 Fedora 系统不仅仅是浏览网页,您可能还需要搜索文件中的文本。 例如,您可能是一名开发人员,不记得您在何处留下了一些代码片段。 或者您可能正在寻找存储在系统配置文件中的设置。 不管是什么原因,有很多方法可以在您的电脑上搜索文字 Fedora 系统。 本文将向您展示怎样操作,包括使用内置实用程序 grep。

介绍 grep

格雷普 实用程序允许您在文件系统上搜索文本或更具体地说是文本模式。 名称 grep 来自全局正则表达式打印。 哎呀,多嘴啊! 这是因为正则表达式(或正则表达式)是一种定义文本模式的方式。

grep 实用程序可让您找到并打印出这些模式的匹配项——因此名称。 这是一个功能强大的系统,您甚至可以在 Visual Studio Code 或 Atom 等现代代码编辑器中找到它。

常用表达

发挥所有的力量 常用表达 肯定是比这篇文章更大的话题。 最简单的正则表达式可以只是一个词,或一个词的一部分。 该模式只是“以下字符,顺序相同”。 模式被逐行搜索。 为了 example:

  • 实用程序 – 匹配 7 个字符 pciutil 一起出现的任何时间 — 包括 pciutil、pciutils、pciutil123 和 foopciutil。
  • ^pciutil – 匹配 7 个字符 pciutil 立即出现在一行的开头(这就是 ^ 代表)
  • pciutil$ – 匹配 7 个字符 pciutil 出现在一行末尾之前的任何时间(这就是 $ 代表)

更复杂的表达式也是可能的。 特殊字符在正则表达式中用作通配符,或用于更改正则表达式的工作方式。 如果要匹配这些字符之一,请使用 (反斜杠)在字符之前。

例如, . (句点或句号)是匹配任何单个字符的通配符。 如果你在表达式中使用它 pci.til, 它匹配 pciutil、pci4til 或 pci!til,但不匹配 pcitil。 必须有一个字符来匹配 . 在正则表达式中。

? 是正则表达式中的一个标记,将前一个元素标记为可选。 所以如果你建立在以前的 example, 表达方式 pci.?til 也将匹配 pcitil,因为在 i 和 t 之间不需要一个字符才能进行有效匹配。

+* 是代表重复的标记。 尽管 + 代表一个或多个前一个元素, * 代表零个或多个。 所以正则表达式 pci. + 直到 将匹配以下任何一项:pciutil、pci4til、pci!til、pciuuuuuutil、pci423til。 但是,它不会匹配 pcitil — 但匹配正则表达式 pci. * 直到 将。

grep 的例子

现在您对正则表达式有所了解,让我们开始使用它。 想象一下,您正试图找到一个提及用户帐户 jpublic 的配置文件。 您已经尝试了一堆文件,但没有一个是正确的,并且您确定它在那里。 因此,尝试搜索 /etc 文件夹(使用 sudo 因为在 root 帐户之外无法读取某些子文件夹):

$ sudo grep -r jpublic /etc/

-r 开关递归搜索文件夹。 该实用程序打印匹配文件的列表以及发生命中的行。 在大多数现代终端环境中,点击颜色突出显示以提高可读性。

假设您在 /home/shared 中有更多的文件选择,您需要确定哪些文件提到了 MacNulty 名称。 但是,您不确定大小写是否一致,您只是在寻找文件名,而不是上下文。 此外,您认为有人可能在某些地方将名称拼错为 McNulty。

使用 -l 开关仅输出具有匹配项的文件名,a ? 名称中可选 a 的标记,以及 -i 使搜索不区分大小写:

$ sudo grep -irl 'ma?cnulty' /home/shared

此命令将匹配 Macnulty、McNulty、Mcnulty 和 macNulty 等字符串,没有问题。 您将获得一个简单的文件名列表,其中在内容中找到了匹配项。

这些只是使用 grep 和正则表达式的最简单方法。 您可以使用 info grep 命令了解更多关于两者的信息。

但是等等,还有更多……

grep 命令很受尊敬,但在某些情况下可能不如较新的搜索实用程序有效。 例如,ripgrep 实用程序被设计为一种可以代替 grep 的快速搜索实用程序。 我们在杂志之前的一篇关于 Rust 和 Rust 应用程序的文章中介绍了 ripgrep:

氧化 Fedora:立即尝试 Rust 及其应用程序

需要注意的是,ripgrep 有自己的命令行开关和语法。 为了 example,它有简单的开关来只打印文件名匹配、反转搜索和许多其他有用的功能。 它还可以忽略基于放置在任何子目录中的 .rgignore 文件。 (同样值得注意的是 -r 开关在 ripgrep 中的使用方式不同,因为它是自动递归的。)

要安装,请使用以下命令:

$ sudo dnf install ripgrep

要探索这些选项,请使用手册页 (man rg)。 您会发现很多(但不是全部)选项与 grep 相同。

祝您搜索愉快!

相关阅读:

Posted in: LinuxTags: