在本教程中,我们将学习如何在 Linux 中使用 grep 命令。 我们使用 grep 命令在文件或文本输出中进行搜索。 grep 命令也可以使用管道“|”与其他命令组合操作员。 Linux 中的 grep 命令可用于搜索模式或正则表达式(Regex 代表正则表达式)。 我们将在本教程中讨论 grep 命令的许多用途。
grep 的基本语法如下:
$ grep 'word' filename $ grep [option] 'word' filename
考虑以下两个文件 grepdemo.txt 和 grepdemo1.txt 作为基于此文本执行的示例。
进一步,在这里我们将讨论在 Linux 中与 grep 命令一起使用的一些选项:
- -这: 只显示匹配的字符串。
- -b: 打印匹配字符串的位置
- -C: 计算匹配字符串的重复次数
- -H: 用匹配的字符串打印文件名
- -一世: 打印匹配的字符串,不管它是大写还是小写。
- -n:打印匹配行的文件的行号
- -v: 打印那些不包含匹配字符串的行。
在 Linux 中使用 grep 命令在文件中搜索单词
如前所述,grep 命令用于从文件中搜索特定单词。 为此,我们只需要提及单词和文件名。
其语法如下:
$ grep "text to find" [filename]
在上面的屏幕截图中,Linux 中的 grep 命令在 grepdemo.txt 中搜索单词“linux”,并将打印包含指定字符串的行。 如上所示,它在文件中只出现过一次。
从所有文件中搜索一个词
在上面的示例中,我们讨论了如何从特定文件中搜索单词。 在这里,我们将讨论如何在一组文件中搜索一个单词。 为此,我们将使用“*”符号。 让我们从一个例子中理解
$ grep 'word' grep*.txt
在这里,它将打印文件名以“grep”开头并具有“.txt”扩展名的所有文件中出现的“the”
在 Linux 中使用 grep 命令搜索 RegEx 模式
大家都知道 regex 代表正则表达式。 Grep 命令还可以搜索正则表达式模式。 让我们通过一个例子来理解。
考虑语法:
$ ls -l | grep ^d
在此示例中,grep 命令将搜索以字母“d”开头的文件名。 使用 ls 命令将列出位于桌面的所有文件和文件夹。 在这里,它列出了 8 个文件/文件夹,其中 ‘d’ 位于开头。 您还可以使用此语法搜索任何正则表达式。
在 Linux 中使用 grep 命令仅打印请求的字符串
您可能已经注意到,默认情况下 grep 命令会打印包含搜索关键字的行。 如果您希望 Linux 中的 grep 命令仅显示模式的匹配字符串,请使用“-o”选项。 让我们从一个例子来理解这一点。
其语法如下:
$ grep -o "the" grepdemo.txt
在这里,它将只打印搜索到的关键字而不是完整的行。
显示匹配模式的位置
Linux 中 grep 命令的“-b”选项可让您打印匹配字符串的位置。 让我们从下面的例子中理解。
考虑语法:
$ grep -o -b "is" grepdemo.txt
在这里,它将打印特定关键字在每一行上出现的位置。 我将“-b”与“-o”结合起来,这样它就只能打印搜索到的字符串。
颜色或突出显示搜索的字符串
如果您希望搜索的字符串具有不同的颜色,您可以使用 GREP_COLOR。 为此,首先导出文件,然后运行 grep 命令。 考虑以下示例。
$ GREP_COLOR='100;10' $ alias grep='grep --color=always' $ grep --color=always "the" grepdemo.txt
在此示例中,搜索到的键盘被突出显示。 在第二个图中,它只会标记搜索关键字所在的位置。 请记住,如果要突出显示搜索关键字,则必须使用导出命令,否则它将不起作用。
在 Linux 中使用 grep 命令计算重复次数
我们还可以在 Linux 中使用 grep 命令来统计搜索到的字符串的重复次数。 为此,我们可以使用“-c”选项。 考虑这个例子:
$ grep -c "word" grep*.txt
上面的屏幕截图演示了关键字“testing”在特定文件中重复了多少次。 在这里,我统计了所有文件中的搜索关键字。 您也可以在单个文件中搜索它。 只需删除“*”并提及文件名。
使用搜索到的字符串打印文件名
早些时候,我们只是打印搜索字符串的行或关键字。 但在这种情况下,我们也会打印包含行的文件名,如下图所示。 我们将在 grep 命令中使用“-H”选项。
考虑以下语法:
$ grep -H "Word" [filename]
在此示例中,它将打印文件名以及搜索字符串所在的行。
在 Linux 中使用 grep 命令进行不区分大小写的搜索
此命令选项忽略大小写条件并在文件中搜索单词。 假设你想搜索“linux”,它会搜索并打印所有出现这个词的行,而不管它的大小写。 匹配字符串是大写还是小写都没有关系。 如果找到匹配项,它将仅打印该行,如下面给出的示例所示。
下面给出了以下语法:
$ grep -i "linux" grep*.txt
将 grep 命令输出存储在文件中
如果要保存搜索结果怎么办。 如前文所述,’>’ 用于输出重定向。 它将命令的输出保存在一个文件中,如下图所示。
以下的语法是:
$ grep "word" [filename] > [filename]
在示例中,结果将存储在名为 text1.txt 的文件中。
在 grep 命令输出中显示行号
我们知道如何打印带有搜索关键字的文件名。 现在,如果要打印匹配行的文件的行号怎么办。 grep 命令的“-n”选项用于打印与匹配行的文件的行号,如下图所示。
以下的语法是:
$ grep -n "word" [filename]
在这里,它将打印出现搜索关键字的行号。
在 Linux 中使用 grep 命令反转匹配
到目前为止,我们一直在搜索关键字并打印该行。 如果我们想打印不包含匹配字符串的行怎么办? ‘-v’ 选项用于此,如下图所示。
以下的语法是:
$ grep -v "word" [filename]
在这里,它将打印那些不包含搜索关键字的行。
检查版本
要在 Linux 中检查 grep 命令的版本,我们使用 ‘-version’ 选项。
语法是:
$ grep --version
如图,会打印grep命令的版本。
结合多个选项
我们还可以在 Linux 的 grep 命令中组合多个选项,如下图所示。
以下的语法是:
$ grep -v -n "word" [filename]
在这里,我们结合了“-v”和“-n”选项。 ‘-v’ 用作反向匹配,而’-n’ 用于打印行号。 因此,它将打印未出现此搜索关键字的那些行号。 你可以在上面给出的图中看到。 它打印了那些不包含“linux”字符串的行号和行。
结论
在本教程中,我们介绍了如何在 Linux 中使用 grep 命令。 我们希望您现在知道如何有效地使用该命令。 如果您有任何疑问,请在评论中告诉我们。