什么是Grep
Grep是“全局正则表达式打印”的缩写,是一种用于在包含正则表达式的文件中搜索和匹配文本模式的命令。此外,该命令在每个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 "string" file name
或
$ filename grep "string"
示例:
$ grep "Linux" welcome.txt
输出 如您所见,grep不仅搜索和匹配了字符串“Linux”,还打印了字符串出现的行。如果文件位于不同的文件路径中,请务必指定文件路径,如下所示。
$ grep "string" /path/to/file
使用 –color 选项给 Grep 结果上色
如果你在一个不显示搜索字符串或模式与其余文本不同颜色的系统上工作,请使用 --color
使你的结果突出显示。例如
$ grep --color "free and opensource" welcome.txt
输出
在所有目录中递归搜索字符串
如果你想在当前目录和所有其他子目录中搜索字符串,可以使用如下的 - r
标志进行搜索
$ grep -r "string-name" *
例如
$ grep -r "linux" *
输出
忽略大小写敏感性
在上面的示例中,我们的搜索结果给出了我们想要的结果,因为字符串“Linux”以大写字母指定,并且文件中也以大写字母存在。现在让我们尝试搜索小写字符串。
$ grep "linux" file name
从输出中什么也没有,对吧?这是因为grep找不到并匹配字符串“linux”,因为第一个字母是小写的。要忽略大小写,使用-i
标志并执行以下命令
$ grep -i "linux" welcome.txt
输出 太棒了,不是吗? 通常使用
-i
来显示字符串,而不管它们的大小写敏感性。
使用-c选项计算匹配字符串的行数
要计算出出现或存在字符串模式的总行数,请执行以下命令
$ grep -c "Linux" welcome.txt
输出
使用grep反转输出
为了反转Grep输出,使用-v
标志。-v
选项指示grep打印不包含或不匹配表达式的所有行。-v选项告诉grep反转其输出,这意味着不打印匹配行,而是打印所有不匹配表达式的行。回到我们的文件,让我们按照显示的方式显示行号。在Vim编辑器上按ESC键,输入一个冒号,然后
set nu
接着,按Enter键输出现在,要显示不包含字符串“Linux”的行,请运行
$ grep -v "Linux" welcome.txt
输出正如您所见,grep显示了不包含搜索模式的行。
使用-n选项给包含搜索模式的行编号
为了给包含字符串模式的行编号,使用-n
选项如下所示
$ grep -n "Linux" welcome.txt
输出
搜索使用 `-w` 选项进行精确匹配的单词
传递 `-w` 标志将搜索包含精确匹配单词的行,如下所示
$ grep -w "opensource" welcome.txt
输出 但是,如果您尝试
$ grep -w "open" welcome.txt
不会返回任何结果,因为我们不是在搜索模式,而是一个确切的单词!
使用管道与 grep
grep 命令可以与管道一起使用以获取不同的输出。例如,如果您想知道 Ubuntu 系统中是否安装了某个特定软件包,请执行
$ dpkg -L | grep "package-name"
例如,要查找您的系统中是否已安装 OpenSSH,请将 dpkg -l
命令通过管道传递给 grep,如下所示
$ dpkg -L | grep -i "openssh"
输出
显示搜索模式前后的行数,使用管道
您可以使用-A或-B来显示在搜索字符串之前或之后的行数。-A标志表示搜索字符串后面的行,-B打印出出现在搜索字符串之前的输出。例如
$ ifconfig | grep -A 4 ens3
此命令显示包含字符串及其后4行文本的ifconfig
命令中的行。ens字符串。输出相反,在下面的示例中,使用-B标志将显示包含搜索字符串及其前3行文本的
ifconfig
命令中的行。ether字符串。输出
$ ifconfig | grep -B 4 ether
使用带有正则表达式的grep
术语正则表达式是REGular的缩写,表示EXpression。正则表达式是一系列用于匹配模式的字符。以下是一些示例:
^ Matches characters at the beginning of a line
$ Matches characters at the end of a line
"." Matches any character
[a-z] Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets
示例 要打印以特定字符开头的行,语法是;
grep ^character file_name
例如,要显示以字母“d”开头的行,在我们的 welcome.txt 文件中,我们将执行
$ grep ^d welcome.txt
输出 要显示以字母‘x’结尾的行,请运行
$ grep x$ welcome.txt
输出
获取有关更多 Grep 选项的帮助
如果您需要了解更多关于 Grep 命令使用的信息,请运行下面的命令,以获取有关您可以与该命令一起使用的其他标志或选项的 sneak 预览。
$ grep --help
示例输出 感谢您花时间阅读本教程。随时尝试这些命令,并告诉我们效果如何。
Source:
https://www.digitalocean.com/community/tutorials/grep-command-in-linux-unix