对匹配特定条件的文件使用 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 中搜索任何模式、线条、单词等。