Linux/UNIX 中的 Grep 命令
在 Linux 和 Unix 系统中,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 "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
输出什么都没有,对吧?这是因为 grepping 无法找到并匹配字符串 \linux,因为第一个字母是小写的。要忽略区分大小写,请使用 -i
标志并执行以下命令
$ grep -i "linux" welcome.txt

计算字符串与 -c 选项匹配的行数
要统计字符串模式出现或驻留的总行数,请执行以下命令
$ grep -c "Linux" welcome.txt

使用 Grep 反转输出
要反转 Grep 输出,请使用 -v
标志。 -v
选项指示 grep 打印所有不包含或不匹配表达式的行。 -v 选项告诉 grep 反转它的输出,这意味着不打印匹配的行,而是做相反的事情并打印所有与表达式不匹配的行。回到我们的文件,让我们显示行号,如图所示。在 Vim 编辑器上按 ESC,输入一个完整的冒号,然后输入
set nu

$ grep -v "Linux" welcome.txt

使用 -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

$ ifconfig | grep -B 4 ether

将 grep 与正则表达式 (REGEX) 结合使用
术语 REGEX 是 REGular EXpression 的首字母缩写词。 REGEX 是用于匹配模式的字符序列。下面是几个例子:
^ 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
例如,要在我们的 welcome.txt 文件中显示以字母 \d 开头的行,我们将执行
$ grep ^d welcome.txt

$ grep x$ welcome.txt

获得有关更多 Grep 选项的帮助
如果您需要了解有关 Grep 命令用法的更多信息,请运行以下命令以预览您可以与该命令一起使用的其他标志或选项。
$ grep --help
