Linux grep命令的示例用法

介绍

Linux grep命令用作过滤输入的方法。

GREP代表全局正则表达式打印机,因此为了有效地使用它,您应该对正则表达式有所了解。

在本文中,我将向您展示一些将帮助您理解grep命令的示例。

09年01月

如何使用GREP在文件中搜索字符串

Linux grep命令。

想象一下,你有一个名为书籍的文本文件,其中包含以下儿童书名:

要在标题中查找所有带有“The”字样的书籍,请使用以下语法:

grep这些书

以下结果将被返回:

在每种情况下,单词“The”都将突出显示。

请注意,搜索区分大小写,所以如果其中一个标题具有“the”而不是“The”,那么它将不会被返回。

要忽略情况,您可以添加以下开关:

grep the books --ignore-case

您也可以使用-i开关,如下所示:

grep - 我的书

09年02月

使用通配符搜索文件中的字符串

grep命令非常强大。 您可以使用多种模式匹配技术来过滤结果。

在这个例子中,我将向您展示如何使用通配符在文件中搜索字符串。

想象一下,你有一个名为苏格兰地名的文件:

阿伯丁

阿伯里斯特威斯

亚伯劳尔

因弗鲁

因弗内斯

纽堡

新鹿

新盖洛韦

格拉斯哥

爱丁堡

如果您想在名称中找到所有包含inver的地方,请使用以下语法:

grep inver *地方

星号(*)通配符代表0或许多。 因此,如果你有一个名叫inver的地方或一个叫做inverness的地方,那么两个人都会被退回。

另一个可以使用的通配符是句点(。)。 你可以用它来匹配一个字母。

grep inver.r的地方

上面的命令会找到称为inverurie和inverary的地方,但不会找到谨慎的地方,因为在两个r之间只能有一个通配符,如单个周期所示。

周期通配符很有用,但是如果您有一个作为您正在搜索的文本的一部分,则可能会导致问题。

例如看看这个域名列表

要查找所有about.com,只需使用以下语法进行搜索即可:

grep *关于*域名

如果列表中包含以下名称,则上述命令将失效:

因此,您可以尝试以下语法:

grep * about.com域名

除非有以下名称的域名,否则这将工作正常:

aboutycom.com

要真正搜索术语about.com,您需要按如下方式转义点:

grep *关于\ .com域名

最后显示的通配符是代表零个或一个字符的问号。

例如:

grep?ber地名

上述命令将返回阿贝丁,aberystwyth甚至berwick。

09年3月

搜索字符串的开始和结束使用grep

克拉(^)和美元($)符号允许您在行首和行尾搜索模式。

想象一下,你有一个名为足球的文件,其队名如下:

如果你想找到所有以曼彻斯特队开始的队伍,你可以使用下面的语法:

grep ^曼彻斯特队

上述命令将返回曼城和曼联,但不是FC曼彻斯特联队。

或者,您可以使用以下语法查找以United结尾的所有团队:

grep United $队

上述命令将返回曼联和纽卡斯尔联队,但不会返回曼彻斯特联队。

09年9月4日

使用grep计数匹配数量

如果你不想使用grep返回匹配模式的实际行,但你只想知道有多少可以使用下面的语法:

grep -c模式输入文件

如果模式匹配两次,则返回数字2。

09年05月05日

查找所有使用grep不匹配的术语

想象一下,你有一个地名列表,列出的国家如下:

您可能已经注意到,科林湾没有任何国家与之相关联。

要搜索具有国家/地区的所有地点,您可以使用以下语法:

grep land $地方

结果返回将是所有地方除了colwyn海湾。

这显然只适用于以土地为终点的地方(几乎不科学)。

您可以使用以下语法反转选择:

grep -v地点$地方

这会找到所有没有土地的地方。

09年06月

如何使用grep在文件中查找空行

假设您有一个输入文件,第三方应用程序使用该输入文件,该文件在发现空行时会停止读取文件,如下所示:

当应用程序在利物浦后到达线路时,它将停止阅读,意味着科尔温湾完全错过了。

您可以使用grep通过以下语法搜索空行:

grep ^ $地方

不幸的是,这不是特别有用,因为它只是返回空白行。

您当然可以通过检查空白行数来检查文件是否有效,如下所示:

grep -c ^ $地方

然而,知道有空行的行号会更有用,因此可以替换它们。 你可以用下面的命令来做到这一点:

grep -n ^ $地方

09年7月

如何使用grep搜索大写或小写字符的字符串

使用grep您可以使用以下语法确定文件中的哪些行具有大写字符:

grep'[AZ]'文件名

用方括号[]可以确定字符的范围。 在上面的例子中,它匹配A和Z之间的任何字符。

因此,要匹配小写字符,可以使用以下语法:

grep'[az]'文件名

如果您只想匹配字母而不是数字或其他符号,则可以使用以下语法:

grep'[a-zA-Z]'文件名

你可以使用如下的数字来做同样的事情:

grep'[0-9]'文件名

09年08月08日

寻找使用grep重复模式

您可以使用大括号{}来搜索重复模式。

想象一下你有一个电话号码如下的文件:

您知道该号码的第一部分需要三位数字,并且您希望找到与该模式不匹配的行。

从前面的例子你知道[0-9]返回文件中的所有数字。

在这种情况下,我们需要以三个数字开头的连字符后跟一个连字符( - )。 你可以用下面的语法来做到这一点:

grep“^ [0-9] [0-9] [0-9] - ”数字

正如我们从前面的例子中知道的那样,克拉(^)意味着该行必须以下面的模式开始。

[0-9]将搜索0到9之间的任何数字。因为它包含三次,所以它匹配3个数字。 最后有一个连字符来表示连字符必须成功的三个数字。

通过使用大括号可以使搜索变小,如下所示:

grep“^ [0-9] \ {3 \} - ”数字

斜杠转义{括号,以便它作为正则表达式的一部分工作,但实质上这是说[0-9] {3},它表示0到9之间的任何数字三次。

大括号也可以使用如下:

{5,10}

{5,}

{5,10}表示被搜索的角色必须重复至少5次,但不超过10次,而{5}则表示角色必须重复至少5次,但可以超过此次数。

09年9月9日

使用其他命令的输出使用grep

到目前为止,我们已经看到了单个文件内的模式匹配,但grep可以使用其他命令的输出作为模式匹配的输入。

一个很好的例子是使用列出活动进程的ps命令。

例如运行以下命令:

ps -ef

系统上的所有正在运行的进程都会显示出来。

您可以使用grep来搜索特定的正在运行的进程,如下所示:

ps -ef | grep firefox

概要

grep命令是一项基本的Linux命令,非常值得学习,因为它可以使您在使用终端时搜索文件和进程时更轻松。