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"
This is a beautiful place to visit.
$ 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
输出中没有任何东西,对吗?这是因为使用grep查找时,无法找到并匹配到字符串“linux”,因为它的第一个字母是小写。如果要忽略大小写,可以使用-i标志,并执行以下命令。
$ grep -i "linux" welcome.txt
使用 -c 选项计算与字符串匹配的行数。
执行以下命令来计算字符串模式出现或存在的总行数。
$ grep -c "Linux" welcome.txt
使用Grep来反转输出
使用-v标志来反转Grep输出。-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
使用正则表达式(REGEX)与grep命令配合使用
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
例如,要显示以字母“d”开头的行在我们的 welcome.txt 文件中,我们将执行。
$ grep ^d welcome.txt
$ grep x$ welcome.txt
获取有关更多Grep选项的帮助。
如果你需要了解更多关于Grep命令的用法,运行下面的命令可以预览其他与该命令一起使用的标志或选项。
$ grep --help