Linux/UNIX Grep命令详解:高效文本搜索技巧

这是文章《Linux/UNIX中的Grep命令》的第1部分(共1部分)。

内容片段: 在Linux和Unix系统中,Grep是”全局正则表达式打印”(Global Regular Expression Print)的缩写,用于搜索和匹配文本文件中包含指定模式的字符串。此外,该命令在每个Linux发行版中都预先安装。在本指南中,我们将介绍常见的grep命令用法,并附带几个示例。

Linux中的grep命令

Grep命令可用于在文本文件中查找或搜索正则表达式或字符串。为了演示这一点,让我们创建一个名为welcome.txt的文本文件,并添加如下所示的一些内容。

Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.

太好了!现在我们准备好执行一些grep命令并操作输出来获得所需的结果。要在文件中搜索字符串,请运行下面的命令语法。

$ grep "字符串" 文件名

或者

$ grep "字符串" 文件名

这是一个很美的地方,值得参观。

$ grep "Linux" welcome.txt
grep命令使用示例
$ grep "字符串" /文件/路径

使用 –color 选项给 Grep 结果上色

如果你正在使用一个没有将搜索字符或模式与其他文本以不同颜色显示的系统,你可以使用–color来使你的结果突出显示。例如。

$ grep --color "free and opensource" welcome.txt 
grep命令使用示例

在所有目录中递归搜索字符串

如果您希望在当前目录及其所有子目录中搜索一个字符串,请使用如示所示的-r标志进行搜索。

$ grep -r "字符串名称" *

例如

$ grep -r "linux" *
grep命令使用示例

忽略大小写

在上面的例子中,我们的搜索结果给出了我们想要的,因为字符串”Linux”是以大写字母指定的,并且在文件中也以大写字母存在。现在让我们尝试在小写中搜索该字符串。

$ grep "linux" 文件名

输出中没有任何东西,对吗?这是因为使用grep查找时,无法找到并匹配到字符串”linux”,因为它的第一个字母是小写。如果要忽略大小写,可以使用-i标志,并执行以下命令。

$ grep -i "linux" welcome.txt
grep命令使用示例

使用 -c 选项计算与字符串匹配的行数

执行以下命令来计算字符串模式出现或存在的总行数。

$ grep -c "Linux" welcome.txt
grep命令使用示例

使用Grep来反转输出

使用-v标志来反转Grep输出。-v选项指示grep打印不包含或不匹配表达式的所有行。-v选项告诉grep反转其输出,即打印不匹配的行,而不是打印匹配的行。回到我们的文件,让我们显示所示的行号。在Vim编辑器上,按下ESC键,然后输入一个冒号。

 set nu
grep命令使用示例
$ grep -v "Linux" welcome.txt
grep命令使用示例

使用-n选项对包含搜索模式的行进行编号

使用如下所示的-n选项,给匹配字符串的行标号。

$ grep -n "Linux" welcome.txt
grep命令使用示例

使用-w选项搜索完全匹配的单词

当使用-w标志时,将搜索包含完全匹配的单词的行。

$ grep -w "opensource" welcome.txt
grep命令使用示例
$ grep -w "open" welcome.txt

由于我们正在搜索的是一个确切的单词而不是一个模式,所以不会返回任何结果!

使用grep命令与管道配合使用

使用grep命令可以与管道一起使用以获取独特的输出。例如,如果你想知道在Ubuntu系统中是否安装了某个特定的软件包,则执行以下命令。

$ dpkg -L | grep "软件包名称"

例如,要查看您的系统是否安装了OpenSSH,可以将dpkg -l命令作为输入管道传递给grep来实现。

$ dpkg -L | grep -i "openssh"
grep命令使用示例

使用管道显示搜索模式之前或之后的行数

您可以使用 -A 或 -B 来显示在搜索字符串之前或之后的行数。-A 的标志表示搜索字符串之后的行,而 -B 则打印出出现在搜索字符串之前的输出。例如,

$ ifconfig | grep -A 4 ens3
grep命令使用示例
$ ifconfig | grep -B 4 ether
grep命令使用示例

使用正则表达式(REGEX)与grep命令配合使用

REGEX 这个词是 REGular EXpression 的缩写。REGEX 是一系列用于匹配模式的字符序列。以下是几个示例:

^      匹配行首的字符
$      匹配行尾的字符
"."    匹配任意字符
[a-z]  匹配A到Z之间的任何字符
[^ ..] 匹配除了括号中包含的字符之外的任何字符

例子:要打印以特定字符开头的行,语法如下;

grep ^字符 文件名

例如,要显示以字母”d”开头的行在我们的 welcome.txt 文件中,我们将执行。

$ grep ^d welcome.txt 
grep正则表达式示例
$ grep x$ welcome.txt
grep正则表达式行尾匹配

获取有关更多Grep选项的帮助

如果你需要了解更多关于Grep命令的用法,运行下面的命令可以预览其他与该命令一起使用的标志或选项。

$ grep --help
grep命令使用示例
bannerAds