介绍
Linux grep命令用作过滤输入的方法。
GREP代表全局正则表达式打印机,因此为了有效地使用它,您应该对正则表达式有所了解。
在本文中,我将向您展示一些将帮助您理解grep命令的示例。
09年01月
如何使用GREP在文件中搜索字符串
想象一下,你有一个名为书籍的文本文件,其中包含以下儿童书名:
- 罗宾汉
- 小红帽
- 彼得潘
- 金发姑娘和三只熊
- 白雪公主和七个小矮人
- Pinnochio
- 帽子里的猫
- 三只小猪
- 格鲁法洛
- 查理和巧克力工厂
要在标题中查找所有带有“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之间只能有一个通配符,如单个周期所示。
周期通配符很有用,但是如果您有一个作为您正在搜索的文本的一部分,则可能会导致问题。
例如看看这个域名列表
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
要查找所有about.com,只需使用以下语法进行搜索即可:
grep *关于*域名
如果列表中包含以下名称,则上述命令将失效:
- everydaylinuxuser.com/about.html
因此,您可以尝试以下语法:
grep * about.com域名
除非有以下名称的域名,否则这将工作正常:
aboutycom.com
要真正搜索术语about.com,您需要按如下方式转义点:
grep *关于\ .com域名
最后显示的通配符是代表零个或一个字符的问号。
例如:
grep?ber地名
上述命令将返回阿贝丁,aberystwyth甚至berwick。
09年3月
搜索字符串的开始和结束使用grep
克拉(^)和美元($)符号允许您在行首和行尾搜索模式。
想象一下,你有一个名为足球的文件,其队名如下:
- 布莱克浦
- 利物浦
- 曼彻斯特城
- 莱斯特市
- 曼联
- 纽卡斯尔联队
- FC曼彻斯特联队
如果你想找到所有以曼彻斯特队开始的队伍,你可以使用下面的语法:
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重复模式
您可以使用大括号{}来搜索重复模式。
想象一下你有一个电话号码如下的文件:
- 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次,但可以超过此次数。
09年9月9日
使用其他命令的输出使用grep
到目前为止,我们已经看到了单个文件内的模式匹配,但grep可以使用其他命令的输出作为模式匹配的输入。
一个很好的例子是使用列出活动进程的ps命令。
例如运行以下命令:
ps -ef
系统上的所有正在运行的进程都会显示出来。
您可以使用grep来搜索特定的正在运行的进程,如下所示:
ps -ef | grep firefox