在匹配特定条件的文件上使用 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 中搜索任何模式、行、单词等。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP