以了解在文件中搜索内容的基础知识,然后下载我们的备忘单以获取grep和正则表达式的快速参考指南。grep(全局正则表达式打印)是KenThompson于1974年开发的基本Unix命令之一。它在计算中无处不在,并且经常用作动词(“搜索文件的内容”)。如果您的对话伙伴是极客头脑,它在现实生活中也适用。(例如,“我将grep我的记忆棒以调用该信息。”)简而言之,grep是一种在文件内容中搜索特定字符模式的方法。如果这听起来像是文字处理器或文本编辑器的现代查找功能,那么您已经感受到了grep在计算行业中的影响。grep绝不是一个被现代技术抛弃的古老命令。它的强大体现在两个方面:grep可以在终端操作数据流,所以你可以把它嵌入到复杂的处理中。您不仅可以在文本文件中查找文本,还可以提取文本并将其发送到另一个命令。grep使用正则表达式来提供灵活的搜索能力。尽管需要一些练习,但学习grep命令很容易。这篇文章将介绍一些在我看来grep最有用的功能。下载我们的免费grep备忘单安装grepLinux会默认安装grep。MacOS默认安装了BSD版本的grep。BSD版本的grep与GNU版本略有不同,因此如果您想完整地阅读本文,请使用Homebrew或MacPorts安装GNU版本的grep。基本grepgrep的基本语法对于所有版本的grep都是相同的。输入参数是匹配模式和你需要搜索的文件。它会将每个匹配的行输出到您的终端。$grepgnugpl-3.0.txt以及这个程序。如果不是,请参阅。。.grep命令默认区分大小写,因此“gnu”、“GNU”和“Gnu”是三个不同的值。您可以使用--ignore-case选项忽略大小写。$grep--ignore-casegnugpl-3.0.txtGNU通用公共许可证GNU通用公共许可证是免费的,GNU通用公共许可证的copyleft许可证旨在保证您对我们大多数软件的GNU通用公共许可证的自由;它也适用于[...16更多结果...]。.您也可以通过--invert-match选项输出所有不匹配的行:$grep--invert-match\--ignore-casegnugpl-3.0.txtVersion3,29June2007Copyright(C)2007FreeSoftwareFoundation,Inc.[...648行...]公共许可证而不是本许可证。但首先,请阅读管道对于能够搜索文件中的文本内容非常有用,但POSIX的真正强大之处在于可以通过“管道”连接多个命令。我发现我使用grep的最佳方式是将它与其他工具(如cut、tr或curl)结合使用。如果现在有一个文件,文件中的每一行都是我要下载的技术论文。我可以打开文件并手动单击每个链接,然后单击Firefox选项将每个文件保存到我的硬盘驱动器,但需要多次单击并花费很长时间。我还可以在文件中搜索链接并使用--only-matching选项仅打印匹配的字符串。$grep--only-matchinghttp\:\/\/.*pdfexample.htmlhttp://example.com/linux_whitepaper.pdfhttp://example.com/bsd_whitepaper.pdfhttp://example.com/important_security_topic.pdf输出是一系列URL,每行一个。这完全符合Bash处理数据的方式,所以我没有将URL打印到终端,而是通过管道将它们传送到curl:$grep--only-matchinghttp\:\/\/.*pdf\example.html|curl--remote-name这个命令可以下载每个文件并用各自的远程文件名保存在我的硬盘上。我在这个例子中的搜索模式可能非常晦涩。这是因为它使用正则表达式,这是一种“通配符”语言,可用于在大量文本中进行模糊搜索。正则表达式没有人认为正则表达式(简称“regex”)很简单。但是,我发现它的名声往往比应有的差。诚然,很多人在使用正则表达式时都“太聪明了”,直到它变得不可读、太大、太复杂以致于需要换行才能理解,但您不必过度使用正则表达式。下面简单介绍一下我使用正则表达式的方式。首先,创建一个名为example.txt的文件并输入以下内容:AlbaniaAlgeriaCanada01311最基本的元素是谦虚。特点。它代表一个字符。$grepCan.daexample.txtCanadapatternCan.da可以成功匹配加拿大字符。代表任何字符。可以使用以下符号来制作.通配符代表多个字符:?匹配前面的模式零次或一次*匹配前面的模式零次或多次+匹配前面的模式一次或多次{4}匹配前面的模式4一旦你学会了这些知识(或你在括号中写的任何其他时间),您可以在example.txt中练习您感兴趣的所有模式。也许有些人会成功,有些人不会。分析结果以了解原因很重要。例如,以下命令不会匹配任何国家:$grepA.aexample.txt因为.字符只能匹配一个字符,除非你增加匹配的数量。使用*字符告诉grep匹配一个字符零次或根据需要多次匹配直到单词的末尾。由于您知道自己在处理什么,因此在这种情况下不需要零次。此列表中不能有单字母国家。因此,您可以使用+来匹配一个字符至少一次和任意次数,直到单词结束:$grepA.+aexample.txtAlbaniaAlgeria您可以使用方括号来提供字母序列:$grep[A,C].+example.txtAlbaniaAlgeriaCanada也可以用来匹配数字。结果可能会让您大吃一惊:$grep[1-9]example.txt1311您是否惊讶地看到11出现在数字1到9的搜索结果中?如果将13添加到搜索列表中会怎样?这些数字是匹配的,因为它们包含1,而1在要匹配的数字中。您会发现正则表达式有时会令人困惑,但是通过经验和实践您可以掌握它们并使用它们来提高您搜索数据的能力。downloadmemogrep命令还有很多选项没有在文章中列出。有一些选项可以更好地显示匹配结果、列出文件、列出匹配的行号、通过在匹配行周围打印内容来显示上下文等。如果您正在学习grep,或者您经常使用它,请查看其帮助页面以查看选项,然后您可以下载我们的备忘单。此备忘单使用短选项(例如,使用-v而不是--invert-matching)来帮助您更加熟悉grep。它还有一个关于正则表达式的部分,可以帮助您记住最通用的正则表达式代码。立即下载grep笔记!