怎样在 Debian 10 上使用 grep 命令

Grep 代表全局正则表达式打印。 它是一个很有用的命令,被 Linux 系统工程师广泛使用,在针对常规文件和系统中搜索字符串或模式时。

在本文中,我将通过大量示例来演示 grep 命令的用法。 我已经在 Debian 10 机器上测试了所有命令和示例。

先决条件

您需要拥有一台具有 root 权限的 Debian 10 机器。

在 Debian 10 上安装 grep 命令

默认情况下,grep 安装在包括 Debian 10 在内的大多数系统上。如果没有安装,请打开终端并使用 root 权限发出以下命令。

apt-get install grep

当系统要求您确认时,按 y,然后从键盘输入。 等待安装完成。

由于我的机器上已经安装了 grep,请查看上面的屏幕截图。 让我们通过在终端上运行以下命令来检查它的版本。

grep --version

它还应该返回版本以及其他详细信息,如下所示。

使用 grep 命令

一旦我们的机器上有 grep 命令可用,我们就可以使用它了。

搜索系统中的特定文件或目录

当您要搜索或定位系统中的特定文件时,该命令的语法应如下所示。

ls -l <​​pathofdirectorytosearch> | grep -i “文件或目录名”

我想在 /etc/ 中搜索网络目录。 完整的命令应如下所示。

ls -l /etc/ | grep -i "network"

‘i’ 选项忽略大小写敏感。 因此,它应该将网络、网络或网络视为相似。

下面是示例输出。

使用 grep 搜索文件名

假设我要搜索位于 /etc/network/ 的“interfaces.d”文件,您必须运行以下命令。

ls -l /etc/network/ | grep -i "interfaces.d"

使用 grep 搜索文件夹名称

如果要查找的单词包含空格,则必须用双引号将其包含在内。 假设我们正在搜索“network daemon”,上面的命令应该如下所示。

ls -l /etc/network/ | grep -i “接口守护进程”

用grep搜索一个完整的词

您可能已经注意到,grep 会返回包括“网络”在内的各种结果,例如networking、networked、networking 或abcnetworking 等。如果您想限制搜索以包含该特定词,则必须使用-w 选项,如下所示。

ls -l /etc/ | grep -i -w network

下面是示例输出。

用grep搜索一个完整的词

搜索文件中的特定文本

我们有一个案例,当您有一个大文件并且想要搜索特定文本时。 命令的语法应如下所示。

grep – i “textyouwanttosearch” “filenameandpath”

假设我想在位于当前目录内的 test.txt 中搜索单词“fox”。 在终端上运行以下命令。

grep -i "fox" test.txt

下面是示例输出,它仅返回文件中包含单词“fox”的那些行。

使用 grep 在文件中搜索文本

执行递归搜索(在多个文件中搜索)

如果要从目录内的大量文件和子目录中搜索文本,可以使用 -r 选项执行递归研究。

grep -i -r "fox"

下面是示例输出,显示单词 fox 出现在所示行中的 test.txt 和 tree.txt 文件中。

递归搜索

您还可以提供目录路径,它将搜索该目录及其子目录中的所有文件。

假设我想对 /etc/ 及其子目录中的文本“interfaces”进行递归研究。 该命令应按如下方式执行。

grep -i -r interfaces /etc/

下面是示例输出。

递归搜索示例

使用单个 grep 命令搜索两个不同的单词

您可以使用单个 egrep(grep 的变体)命令搜索两个不同的单词,如下所示。 假设我想使用 -r 选项在多个文件中搜索完整的单词 fox 和 lazy 。 您必须在终端上运行以下命令。

egrep -w -r "fox|lazy"

下面是示例输出。

使用单个 grep 命令搜索两个不同的单词

编号与文本匹配的行

另一个有用的选项是 -n 对匹配文本的行进行编号。 以下是 example 说明怎样使用 -n 选项。

grep -i -n "fox" test.txt

以下是对与单词“fox”匹配的行进行编号的示例输出。

编号与文本匹配的行

反转搜索

这与我们上面所做的相反。 如果要返回不包含指定单词的文本,可以使用 -v 选项。

下面是 example 演示 -v 选项的使用。

grep -v -i "fox" test.txt

下面是示例输出。

反向grep搜索

以上所有选项(-n 等)也可以与 -v 选项一起应用。

计算比赛

如果您只想计算与特定文本匹配的次数,您可以使用 -c 选项。

让我们数一下位于当前目录内的 test.txt 中的“fox”这个词。 在终端上运行以下命令。

grep -i -c fox test.txt

以下是执行上述命令后的示例输出,显示单词 fox 在 test.txt 文件中匹配三次。

使用 grep 计算匹配项

显示与特定文本匹配的文件名

如果您想找出包含您的特定单词的文件,您可以将 -l 选项与 -r 一起使用,如下所示。 假设所有文件都位于您当前的目录中,并且您正在搜索或匹配的特定单词是“fox”。

grep -i -r -l fox

下面是示例输出,显示单词 fox 存在于 test.txt 以及子目录和文件 asif.txt 中

显示与特定文本匹配的文件名

只显示匹配的文本

默认情况下,grep 显示与您想要的文本或单词匹配的整行。 如果您希望 grep 向您显示匹配的单词,您可以使用 -o 选项,如下所示。

grep -i -o fox test.txt

下面是示例输出。

只显示匹配的文本

显示以特定单词开头的行

如果要检索以特定单词开头的所有行,可以使用 ^ 运算符,如下所示。

假设您要返回所有以“unix”开头的行,并且文件是位于当前目录中的 log.txt。

在终端上运行以下命令。

grep -i "^unix" log.txt

下面是示例输出。

显示以特定单词开头的行

显示以特定单词结尾的行

如果要从以特定单词结尾的文件中返回所有这些行,可以按如下方式使用 $ 运算符。 假设单词是“linux”,并且您要搜索的文件是位于当前目录中的 rev.txt。

在终端上运行以下命令。

grep -i "linux$" rev.txt

下面是示例输出。

显示以特定单词结尾的行结论

所以这是我关于 grep 命令使用的教程。 我已经演示了大多数 grep 选项,这些选项最常用,您可能在日常工作中需要这些选项。 grep 命令有一些变体,包括 zgrep 等。您可以自己探索它们。

怎样在 Debian 10 上使用 grep 命令

相关阅读:

Posted in: LinuxTags: