在匹配特定条件的文件上使用 grep


Grep(全局正则表达式打印)命令匹配并在正则表达式中搜索特定模式。此命令过滤并搜索特定字符模式,并将它们显示为输出。它被认为是 Unix/Linux 类系统上系统管理员和开发人员最有用命令之一。

Linux 包含各种类型的命令和实用程序来简化每个任务。与其他操作系统不同,在 Linux 中查找任何文件都很简单,因为您可以使用 grep 命令搜索任何文件。

您可以使用 grep 命令显示包含您要查找的特定模式的特定文件的名称。但是,在 Linux 中使用 grep 命令时,您应该遵循一些事项 -

  • 默认情况下,Grep 是区分大小写的命令。因此,您必须使用 -i 选项来匹配不区分大小写的模式。

  • 您必须在 grep 命令中使用引号来搜索对 shell 具有特殊意义的字符。

  • Grep 命令显示包含特定字符的整行。因此,您必须仅使用 -o 选项来显示文件名和搜索的字符。

在本简短指南中,我们将对匹配 Linux 上特定条件的文件使用 grep。

在 Linux 上使用 Grep 匹配特定条件的文件

grep 命令预装在大多数 Linux 发行版中。让我们在“文档”目录中创建一些示例文件,并在这些文件中匹配字符串或正则表达式。

~$: sudo tree Documents 
Documents
|__ sample1
|__ sample2
|__ sample3

0 directories, 3 files

现在,我们将通过 Linux 中 grep 命令的不同选项搜索这些示例文件。

在文件上匹配区分大小写的搜索

如果您必须使用 grep 在文件中查找确切的单词和模式,则它属于区分大小写的搜索。

grep <pattern> <filename1> <filename2>.....

在这里,我们将搜索“unix”在“文档”目录中的所有文件中。

为此,请使用以下命令 -

~$: grep unix sample1 sample2 sample3
sample1:unix
sample3:unix operating system

上述命令匹配提到的模式并显示包含“unix”的文件。

在文件上匹配不区分大小写的搜索

您可以使用上述命令中的 -i 选项不区分大小写地搜索任何模式 -

grep -i <pattern> <filename1> <filename2>.....

让我们显示所有与“unix”相关的结果,但终端将显示所有包含“Unix”或“unix”的文件。

~$: grep -i "unix" sample1 sample2 sample3
sample1:unix
sample1:Unix
sample2:Unix
sample3:unix operating system

仅搜索匹配的模式

默认情况下,grep 命令显示整个段落或行。您可以通过在 grep 命令中使用 -o 选项来仅显示模式而不是整个段落或行。

grep -o "<pattern>" <filename>

在这里,我们将通过 grep 命令及其 -o 选项搜索“Linux” -

~$: grep -o "Linux" sample1 sample3
sample1:Linux

搜索与模式匹配的文件名

如果要搜索包含特定模式或字符串的文件,请使用以下命令 -

grep -l "<pattern>" <filename1> <filename2>.....

或者,

grep -l "<pattern>" *

例如,以下命令将显示当前目录中包含“linux”一词的文件的名称 -

~$: grep -l "linux" *
sample1
sample3

匹配任何模式

使用以下 grep 命令显示与文件中任何单词、模式等匹配的特定字符。

grep "..<letter_pattern>" <filename>

在这里,以下命令显示“Linux”和“Unix”这两个模式,它们以“x”结尾。

~$: grep "..x" sample1 sample3
sample2:Linux
sample2:Linux
sample2:Unix
sample3:linux
sample3:unix operating system.

匹配反转模式

您只能匹配与提到的模式不相同的行。在这种情况下,您可以按如下所示在 grep 命令中使用 -v 选项 -

grep -v "<pattern>" <filename>

例如,我们将搜索不包含“Linux”一词的文件。

~$: grep -v "Linux" sample1 sample2 sample3
sample1:GNU operating system
sample1:gnu
sample1:Gnu
sample:unix
sample1:linux
sample1:unix
sample2:GNU
sample2:unix
sample3:linux
sample3:unix operating system.
sample3:gnu operating system.

匹配以特定单词/字符串开头的模式

正则表达式模式“^”定义段落或行的开头。使用以下 grep 命令,您可以显示以特定模式或字符串开头的行。

grep "^<pattern>" <filename>

在以下命令中,我们将使用 grep 命令在文件中搜索“gnu” -

~$: grep "^gnu" sample2 sample3
sample3:gnu operating system.

匹配以特定单词/字符串结尾的模式

正则表达式模式“$”定义段落/行的结尾。使用此表达式与 grep 命令一起,您可以匹配以提到的模式/单词结尾的行或段落。

grep "<pattern>$" <filename>

例如,我们将搜索多个文件中的“system” -

~$: grep "system$" sample1 sample2 sample3
sample3:unix operating system.
sample3:gnu operating system.

递归匹配目录中的模式

如果要匹配整个目录中的模式而不是目录中的特定文件,则可以使用 -R 选项与 grep 命令一起使用,如下所示 -

grep -R <pattern> <directory>

现在,我们将递归运行 grep 命令以查找“文档”目录中包含“GNU”的文件 -

~$: grep -R GNU Documents
Documents/sample2:GNU
Documents/sample1:GNU operating system

额外提示 - 如果要匹配当前目录中所有文件中存在的特定模式,则可以使用 -w 选项与 grep 命令一起使用,如下所示 -

grep -w <pattern> *

匹配具有特定扩展名的文件

使用以下命令搜索目录中包含特定扩展名的文件中的模式

grep -R --include=*.<file_extention> '<pattern>' <directory>

在下面的示例中,grep 命令仅检查扩展名为“.txt”的文件中的提到的模式。

~$: grep -R --include=*.txt 'Linux' Documents
Documents/sample1.txt:Linux is a kernel

注意 - 您还可以使用上述命令一次匹配多个扩展名的文件中的模式。

结论

grep 命令是在 Linux 中通过终端过滤具有特定模式的文件的绝佳方法。在本指南中,我们通过各种示例解释了通过各种条件匹配文件的方法。使用 grep 命令非常容易,您也可以通过上面的一些示例看到它。因此,您只需点击几下即可使用 grep 命令在 Linux 中搜索任何模式、行、单词等。

更新于: 2023年5月18日

1K+ 阅读量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.