发布于 2026-01-06 0 阅读
0

Linux 根目录:使用 Grep 搜索文件

Linux 根目录:使用 Grep 搜索文件

介绍

Grep 是 Linux(或 Unix)中常用的命令,用于在一个或多个文件中搜索模式或单词。

有趣的事实:grep 是 Global regular expression print(g/re/p) 的缩写。它最初是 Unix 一款名为edee dee(发音为“ee dee”)的简单文本编辑器中的一个命令。该命令会打印出所有匹配特定模式的行。

grep 命令有很多种用法。在本教程中,您将使用 grep 命令在文件和目录中进行搜索,并打印包含特定字符串的文件类型等等。

先决条件

  • 您可以使用 Linux shell 或任何 Unix 终端,例如 macOS 自带的终端。如果您没有安装 Linux 发行版,可以使用在线命令行 shell 来练习这些命令。本教程中使用的是 macOS 自带的终端。
  • 在您的计算机上创建一个名为“story”的目录book,并在其中创建两个文本文件,分别命名为 story.txt 和 poem.txt。我们将在整个教程中使用这些文件。如果您想练习使用 Linux 命令创建目录、文件和添加文本,请参阅我的“动手实践命令”教程的第一部分和第二部分。

story.txt文件中添加以下文字:
猫俳句
清晨
你睡着了,尽管我喵喵叫
我站在你的脸上

poem.txt文件中添加以下文本:
一首猫的诗
喵喵喵 喵
喵喵喵
喵喵

例子:
使用 Linux 命令创建目录和文件

在文件中搜索

grep 命令的一种用途是在特定文件中搜索单词。在本节中,您将使用 grep 命令在 story.txt 文件中搜索单词“cat” 。

在终端中book使用命令导航到您的目录cd,然后输入:

grep cat story.txt
Enter fullscreen mode Exit fullscreen mode

使用 grep 搜索文件
没有返回任何内容

这条命令会在story.txt文件中查找与特定模式匹配的内容cat。您会在终端中看到它没有返回任何结果。story.txt 文件中确实存在单词“cat”,但它是大写的。grep
命令区分大小写。要返回文本文件中与模式“cat”匹配的行,您可以输入:

grep Cat story.txt
Enter fullscreen mode Exit fullscreen mode

然而,您可能并不知道要在文件中查找的模式的大小写。要搜索不区分大小写的单词或模式,您可以使用 ` --size`-i标志。`-- -isize` 标志是 `--size` 的简写--ingnore-case

grep -i cat story.txt
Enter fullscreen mode Exit fullscreen mode

现在输出应该返回包含该模式的正确行。
输出:

A Cat Haiku
Enter fullscreen mode Exit fullscreen mode

使用 grep 命令的 -i 标志

递归搜索

当您想要搜索多个文件,或者不确定哪个文件包含特定模式时,可以使用 grep 命令和 -r-r标志递归搜索目录。-r 标志是 grep 命令的简写形式。--recursive

在这个例子中,我们将在目录中搜索单词“meow”book

该命令将使用标志grep-r要搜索的模式/字符串以及要搜索的目录路径。

在终端中输入:
grep -r "meow" /Users/cmgorton/Desktop/book

输出:

/Users/cmgorton/Desktop/book/poem.txt:Meow meow meow
/Users/cmgorton/Desktop/book/poem.txt:Meow meow meow meow
/Users/cmgorton/Desktop/book/poem.txt:Meow meow
/Users/cmgorton/Desktop/book/story.txt:You sleep despite my meow
Enter fullscreen mode Exit fullscreen mode

使用 grep 命令的 -r 标志

你可以看到,该命令返回了诗歌故事文本文件中与模式匹配的每一行

-v带标志的反向搜索

之前,我们使用 grep 命令来查找文件中所有与某个单词匹配的行。你可以使用-v`--reverse` 标志来反向搜索 grep 命令。`--reverse`-v标志是 `--reverse` 的简写--invert-match。这意味着搜索将返回文件中所有与你查找的模式不匹配的行。

在这个例子中,我们将查找文件中所有包含单词“meow”的行poem.txt

book目录中输入:

grep -v "meow" poem.txt
Enter fullscreen mode Exit fullscreen mode

输出:

A Cat Poem
Enter fullscreen mode Exit fullscreen mode

使用 -v 标志进行反向搜索

现在你可以尝试在story.txt文件中进行同样的反向搜索,看看结果会是什么。

搜索特定文件类型

当我们搜索之前的文件时,我们知道它们都包含单词“meow”。但是,如果您不确定哪些文件包含该单词,您可以使用标志搜索特定文件类型-l

`--files-with-matches`参数-l flag is shorthand for将仅搜索包含指定行的文件名。在本例中,您将搜索 .txt 文件类型,以查看哪些文件包含单词“ meow”

注意:此命令将搜索当前工作目录中的所有文件。

导航至该book目录。
输入: 输出:
bash
grep -l meow *.txt


bash
poem.txt
story.txt

使用 grep 和 -l 标志进行搜索

注意:Linux 中的 * 代表“零个或多个字符”。在本例中,它会查找所有包含这些字符的文件.txt

结论

grep在本教程中,您探索了使用`--search` 在文件和目录中搜索模式的几种方法。`
--search` 还有许多其他标志可以配合使用grep。您还可以使用管道将命令的输出通过管道传递grep给 `--search` 来过滤信息。

要查看所有可用选项,请在终端中grep输入man grep:这将列出通用命令手册grep

如果您想以可视化的方式查看这些命令,请查看我分享 GoodNotes 的帖子。

文章来源:https://dev.to/coffeecraftcode/root-to-linux-search-files-with-grep-516m