Linux使用grep命令作为过滤的方法输入。GREP代表全球正则表达式打印机,因此为了有效地使用它,你应该有一些关于正则表达式的知识。
在本文中,您将学习一些例子将帮助您了解grep命令。
如何在一个文件搜索一个字符串使用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命令,这是一个很值得学习,因为它将使你的生活更容易搜索文件和流程时当使用终端。