如何在 Debian 10 上使用 grep 命令
Grep 代表全局正则表达式打印。这是一个有用的命令,被 Linux 系统工程师广泛使用,用于在常规文件和系统中搜索字符串或模式。
在本文中,我将通过大量示例来演示 grep 命令的用法。我已经在 Debian 10 机器上测试了所有命令和示例。
先决条件
您需要拥有一台具有 root 权限的 Debian 10 计算机。
在 Debian 10 上安装 grep 命令
默认情况下,大多数系统(包括 Debian 10)都安装了 grep。如果未安装,请打开终端并使用 root 权限发出以下命令。
apt-get install grep
当系统要求您确认时,请按 y,然后从键盘输入。等待安装完成。
由于 grep 已经安装在我的机器上,请检查上面的屏幕截图。让我们通过在终端上运行以下命令来检查其版本。
grep --version
它还应该返回版本以及其他详细信息,如下所示。
使用 grep 命令
一旦我们的机器上有了可用的 grep 命令,我们就可以使用它了。
搜索系统中的特定文件或目录
当您想要搜索或定位系统中的特定文件时,命令的语法应如下所示。
ls -l <搜索目录路径> | grep -i "文件或目录名"
我想在/etc/中搜索网络目录。完整的命令应如下所示。
ls -l /etc/ | grep -i "network"
“i”选项忽略大小写。因此,它应该将网络、网络或网络视为类似的。
以下是示例输出。
假设我想搜索位于 /etc/network/ 的“interfaces.d”文件,您必须运行以下命令。
ls -l /etc/network/ | grep -i "interfaces.d"
如果要查找的单词包含空格,则必须将其包含在双引号中。假设我们正在搜索“网络守护程序”,上面的命令应如下所示。
ls -l /etc/network/ | ls -l /etc/network/ | grep -i“接口守护进程”
使用 grep 搜索完整的单词
您可能已经注意到,grep 返回了各种结果,其中包括“网络”,例如网络、networked、networking 或 abcnetworking 等。如果您想限制搜索以包含该特定单词,则必须使用 -w 选项,如下所示。
ls -l /etc/ | grep -i -w network
以下是示例输出。
搜索文件中的特定文本
我们有一个案例,当您有一个大文件并且您想要搜索特定文本时。该命令的语法应如下所示。
grep - i "textyouwanttosearch" "filenameandpath"
假设我想在当前目录中的 test.txt 中搜索单词“fox”。在终端上运行以下命令。
grep -i "fox" test.txt
下面是示例输出,它仅返回文件中包含单词“fox”的那些行。
执行递归搜索(在多个文件中搜索)
如果您想从目录内的大量文件和子目录中搜索文本,可以使用 -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"
以下是示例输出。
对与文本匹配的行进行编号
另一个有用的选项是 -n,它对与文本匹配的行进行编号。以下是说明如何使用 -n 选项的示例。
grep -i -n "fox" test.txt
下面是示例输出,其中对与单词“fox”匹配的行进行编号。
反向搜索
这与我们上面所做的相反。如果要返回不包含指定单词的文本,可以使用 -v 选项。
下面是演示 -v 选项用法的示例。
grep -v -i "fox" test.txt
以下是示例输出。
上述所有选项(-n 等)也可以与 -v 选项一起应用。
计算匹配数
如果您只想计算特定文本的匹配数,可以使用 -c 选项。
让我们计算当前目录下 test.txt 中的单词“fox”。在终端上运行以下命令。
grep -i -c fox test.txt
下面是执行上述命令后的示例输出,显示单词“fox”在 test.txt 文件中匹配了三次。
显示与特定文本匹配的文件名
如果您想查找包含特定单词的文件,可以使用 -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 等。您可以自行探索。