Linux的例子使用grep命令

更容易找到你正在寻找的命令行。

Linux使用grep命令作为过滤的方法输入。GREP代表全球正则表达式打印机,因此为了有效地使用它,你应该有一些关于正则表达式的知识。

在本文中,您将学习一些例子将帮助您了解grep命令。

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

Linux grep命令手动截图

想象你有一个文本文件叫用以下儿童阅读的书籍的书名:

  • 罗宾汉
  • 小红帽
  • 彼得·潘
  • 金发姑娘和三只熊的故事
  • 白雪公主和七个小矮人
  • Pinnochio
  • 《帽子里的猫
  • 三只小猪
  • 的Gruffalo
  • 查理和巧克力工厂

找到所有的书的标题里有“的”这个词你可以使用下面的语法:

grep的书

将返回以下结果:

金发姑娘和三只熊的故事
白雪公主和七个小矮人
《帽子里的猫
三只小猪
的Gruffalo
查理和巧克力工厂

在每种情况下,“”这个词将被突出显示。

搜索是大小写敏感的如果一个标题的“的”而不是“”那么它就不会回来了。

忽视的情况您可以添加以下开关:

grep的书——忽略大小写

您还可以使用- i开关如下:

grep - i的书

搜索一个字符串在一个文件中使用正则表达式

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

在本例中,我们将向您展示如何查找一个字符串在一个文件中使用通配符。

想象你有一个文件叫地方以下苏格兰地名:

阿伯丁
阿伯里斯特威斯大学
aberlour
inverurie
因弗内斯

新鹿
新加
格拉斯哥
爱丁堡

如果你想找到的所有地方的发票名称使用下面的语法:

grep发票*的地方

星号(*)字符不工作很喜欢在常规Bash。在grep的背景下,交易在正则表达式中,星号表现不同。而不是匹配任何或没有字符,Bash,它匹配输入模式+任何或任何后续的重复模式。

在上面的示例中,它匹配:

inverurie
因弗内斯

因为他们都包含输入的模式“发票”+ 0额外重复的模式。再次见到这个更清楚,添加:

repeatinverinverinver

到列表中。不,它没有多大意义,但它将展示星号是如何工作的。尝试再次运行命令。

grep发票*的地方

你看到新行吗?不会工作在Bash中,但它在这里。

为了让事情更奇怪,运行该命令没有星号。

grep发票的地方

结果都是一样的。默认情况下,grep将寻找一个模式,它出现在任何地方的文本字符串。它不区分似乎多少次。

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

grep发票。r的地方

上面的命令会发现的地方叫做inverurie inverary但不会找到invereerie因为两者之间只能有一个通配符r是用单一时期。

通配符是有用的但如果你有一个问题是你搜索的文本的一部分。

例如,看看这个域名的列表

  • linux.乐动体育赞助lifewire.com
  • pcsupport.乐动体育赞助lifewire.com
  • mp3.乐动体育赞助lifewire.com
  • minecraft.乐动体育赞助lifewire.com
  • androidgames.乐动体育赞助lifewire.com
  • netforbeginners.乐动体育赞助lifewire.com
  • everydaylinuxuser.com
  • google.co.uk
  • google.au
  • direct.gov.uk
  • fakesite.乐动体育赞助lifewire1com.com

你可以找到所有lifewire.乐动体育赞助com的url搜索使用下面的语法:

grep。com域名

上面的命令将跌倒如果列表包含以下名称:

everydaylinuxuser.com

因此,你可以试试下面的语法:

grep 乐动体育赞助lifewire.com域名

这将工作好,除非有一个域以下名称:

fakesite.乐动体育赞助lifewire1com.com

真正搜索lifewire.com你需要逃离这个词点如下:乐动体育赞助

grep 乐动体育赞助lifewire \ \ com域名

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

例如:

grep - e ? ber地名

阿伯里斯特威斯大学上面的命令将返回阿伯丁,甚至伯威克,如果它是在名单上。注意额外的“e”的旗帜。Grep不会认识到吗?字符不支持扩展正则表达式支持。

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

克拉(^)和美元($)标志允许您搜索模式的开始和结束行。

想象你有一个文件叫足球与下面的团队名称:

  • 布莱克浦
  • 利物浦
  • 曼城
  • 莱斯特城
  • 曼联
  • 纽卡斯尔联队
  • 曼彻斯特俱乐部曼联

如果你想找到所有的团队开始与曼彻斯特你会使用下面的语法:

grep ^曼彻斯特球队

上面的命令将返回曼城和曼联而不是曼彻斯特FC曼联。

或者,你可以找到所有的团队以联合使用下面的语法:

grep美元美国团队

上面的命令将返回曼联和纽卡斯尔联队但不是FC曼彻斯特联合。

使用grep计数的数量匹配

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

grep - c模式inputfile

如果模式匹配两次那么2号将返回。

找到所有的条款使用grep不匹配

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

  • 苏格兰阿伯丁
  • 苏格兰格拉斯哥
  • 利物浦英格兰
  • colwyn湾
  • 伦敦英格兰

您可能已经注意到,colwyn湾没有与之关联的国家。

搜索所有与一个国家的地方你可以使用下面的语法:

grep土地美元的地方

结果回报将是所有的地方除了colwyn湾。

这显然只适用于地方以土地(不科学)。

您可以使用以下语法:逆选择

grep - v土地美元的地方

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

如何找到文件使用grep空行吗

想象你有一个输入文件由一个第三方应用程序,它使用停止阅读文件时发现一个空行如下:

  • 苏格兰阿伯丁
  • 因弗内斯苏格兰
  • 利物浦英格兰
  • 威尔士colwyn湾

当应用程序被线之后,利物浦将停止阅读意义colwyn湾是完全错过了。

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

grep ^ $的地方

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

当然,你可以得到一个计算数量的空白行作为检查文件是有效的如下:

grep - c ^ $的地方

然而,它将更有用的知道的行号,有一个空行,这样您就可以取代他们。你可以使用下面的命令:

grep - n ^ $的地方

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

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

grep的[a -ž]的文件名

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

因此以匹配小写字母,您可以使用下面的语法:

grep的[a -ž]的文件名

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

grep (a-zA-Z)的文件名

你可以做同样的数字如下:

grep[0 - 9]的文件名

寻找重复模式使用grep

您可以使用花括号{}来搜索一个重复的模式。

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

  • 055 - 1234
  • 055 - 4567
  • 555 - 1545
  • 444 - 0167
  • 444 - 0854
  • 4549 - 2234
  • x44 - 1234

你知道的第一部分数量需要三位数,你想找到这种模式不匹配的行。

从之前的例子,你知道[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次,但它可以更多。

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

到目前为止我们看了模式匹配在单个文件但grep可以使用另一个命令的输出作为输入进行模式匹配。

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

例如,运行以下命令:

ps英孚

所有的将显示在您的系统上运行的进程。

您可以使用grep搜索一个特定的运行过程如下:

ps ef | grep firefox

总结

是一项基本的grep命令Linux命令,这是一个很值得学习,因为它将使你的生活更容易搜索文件和流程时当使用终端。

这个页面是有用吗?