Linux/UNIX 中的 Grep 命令

在Linux和Unix系统中,Grep是全局正则表达式打印的缩写,是一个用于搜索和匹配正则表达式中包含的文本文件的命令。此外,该命令预装在每个Linux发行版中。在本指南中,我们将通过一些示例来了解通用grep命令的用法。

Linux中的grep命令

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

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

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

1$ grep "string" file name

1$ filename grep "string"

示例

1$ grep "Linux" welcome.txt

OUTPUT grep命令usage如您所见,grep不仅搜索并匹配字符串linux,还打印出出现该字符串的行。如果文件位于不同的文件路径中,请确保指定如下所示的文件路径

1$ grep "string" /path/to/file

使用--color选项着色Grep结果

如果你使用的系统不会用与文本其他部分不同的颜色显示搜索字符串或模式,那么使用--color可以让你的结果脱颖而出。例如

1$ grep --color "free and opensource" welcome.txt

输出 grep命令usage

递归查找所有目录中的字符串

如果您希望在当前目录和所有其他子目录中搜索字符串,请使用-r标志进行搜索,如下所示

1$ grep -r "string-name" *

例如

1$ grep -r "linux" *

输出 grep命令用法example

忽略区分大小写

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

1$ grep "linux" file name

输出中没有发现,对吧?这是因为greping无法找到并匹配字符串linux,因为第一个字母是小写的。要忽略区分大小写,请使用-i标志并执行以下命令

1$ grep -i "linux" welcome.txt

OUTPUT grep命令用法examplesAwese不是吗?** -i通常用来显示字符串,不区分大小写。**

统计字符串与-c选项匹配的行数

要计算字符串模式出现或驻留的总行数,请执行以下命令

1$ grep -c "Linux" welcome.txt

输出 grep命令用法examples

使用Grep反转输出

要反转grep输出,请使用-v标志。-v选项指示grep打印不包含或不匹配该表达式的所有行。V选项告诉grep反转其输出,这意味着不打印匹配的行,相反地打印与表达式不匹配的所有行。返回到我们的文件,让我们显示如下所示的行号。在Vim编辑器上按Esc键,然后键入一个冒号

1set nu

接下来,按EnterOUTPUT grep命令用法examplesNow,显示不包含字符串linuxRun的行

1$ grep -v "Linux" welcome.txt

OUTPUT grep命令用法examples如您所见,grep显示了不包含搜索模式的行。

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

要对字符串模式匹配的行进行编号,请使用-n选项,如下所示

1$ grep -n "Linux" welcome.txt

输出 grep命令用法examples

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

然后传递-w标志将搜索包含完全匹配的单词的行,如下所示

1$ grep -w "opensource" welcome.txt

输出 grep命令用法examples,如果您尝试

1$ grep -w "open" welcome.txt

不会返回任何结果,因为我们搜索的不是模式,而是确切的单词!

在grep中使用管道

grep命令可以与管道一起使用,以获得不同的输出。例如,如果你想知道某个包是否安装在Ubuntu系统中,

1$ dpkg -L | grep "package-name"

例如,要了解您的系统中是否安装了OpenSSH,可以通过管道将dpkg-l命令传递给grep,如下所示

1$ dpkg -L | grep -i "openssh"

输出 grep命令usage

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

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

1$ ifconfig | grep -A 4 ens3

此命令在ifconfig命令中的_ens_string之后显示包含该字符串的行和4行文本。OUTPUT grep Usage commands相反,在下面的示例中,使用-B标志将显示包含搜索字符串的行,并在ifconfig命令中的_ETHING_STRING之前显示3行文本。** 输出**

1$ ifconfig | grep -B 4 ether

grep命令usage

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

术语REGEX是REG ular** Expression** 的首字母缩写。REGEX是用于匹配模式的字符序列。以下是几个例子:

1^      Matches characters at the beginning of a line
2$      Matches characters at the end of a line
3"."    Matches any character
4[a-z]  Matches any characters between A and Z
5[^ ..] Matches anything apart from what is contained in the brackets

示例 要打印以某个字符开头的行,语法为;

1grep ^character file_name

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

1$ grep ^d welcome.txt

OUTPUT grep regex example以显示以字母‘x’结尾的行

1$ grep x$ welcome.txt

输出 line的grep正则表达式结束

获取更多grep选项的帮助

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

1$ grep --help

示例输出 grep命令usage感谢您抽出时间来阅读本教程。请随时尝试这些命令,并让我们知道它的进展情况。

Published At
Categories with 技术
Tagged with
comments powered by Disqus