网站搜索

对匹配特定条件的文件使用 grep


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

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

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

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

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

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

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

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

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

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

0 directories, 3 files

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

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

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

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

这里我们将在Documents目录下的所有文件中搜索单词“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 命令默认显示整个段落或行。通过将 -o 选项与 grep 命令结合使用,您可以仅显示模式而不是整个段落或行。

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.

匹配反转模式

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

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

额外提示 - 如果您想匹配当前目录中存在的所有文件中的特定模式,您可以通过使用带有 grep 命令的 -w 选项来实现,如下所示 -

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 中搜索任何模式、线条、单词等。

相关文章: