linux grep命令详解,linux grep使用

如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. 简介grep命令用于在文件中查找指定内容。本教程展示了一些最常见的grep命令示例,对软件开发人员特别有益。最近,我开始使用Asciidoctor.js、Asciidoctor.js-pug、Asciidoctor-templates.js项目。当您第一次深入到包含数千行代码的代码库时,高效工作并容易。但是我的秘密武器是grep。

我将通过示例与您分享如何在Linux中使用grep命令。

Linux三剑客之grep使用案例

面向开发人员的10个grep命令实用示例

2. 在Linux系统上使用`grep`命令

Linux三剑客之grep使用案例

在Linux系统上使用grep命令

 

如果您查看man手册,您将看到grep工具的简短描述:

 

打印匹配语法的行。但是,不要被这种简单的定义所愚弄

grep是Unix/Linux工具箱中最有用的工具之一,在处理文本文件时,有无数场合可以使用它。

最好是有真实的例子来学习它是如何工作的。因此,我将使用Asciidoctor.js源代码树来演示一些grep功能。您可以从GitHub下载源代码树,如果您愿意,您甚至可以查看我在撰写本文时使用的同一个版本。这将确保您获得的实验结果与本文其余部分描述的完全相同:

git clone asciidoctor.jsgit checkout v1.5.6-rc.12.1 查找所有出现的字符串(基本用法)Asciidoctor.js支持JAVA平台的Nashorn JavaScript engine,我不了解Nashorn,因此我可以利用这个机会通过研究引用该JavaScript引擎的项目部分来进一步了解它。

Linux三剑客之grep使用案例

查找所有出现的字符串(基本用法)

 

首先,我需要检查package.json这个文件中是否有与Nashorn依赖关系的相关描述。

sh$ grep nashorn package.json “test”: “node npm/test/builder.js && node npm/test/unsupported-features.js && node npm/test/jasmine-browser.js && node npm/test/jasmine-browser-min.js && node npm/test/jasmine-node.js && node npm/test/jasmine-webpack.js && npm run test:karmaBrowserify && npm run test:karmaRequirejs && node npm/test/nashorn.js”,是的,显然有一些针对Nashorn-specific的测试。让我们进一步研究一下。2.2 不区分大小写的搜索现在,我想仔细查看一下./npm/test/目录中的文件,其中明确地提到了Nashorn。这里使用不区分大小写的搜索(i选项)可能更好,因为我需要找到对nashorn和nashorn的引用(或任何其他大小写字符的组合):

sh$ grep -i nashorn npm/test/*.jsnpm/test/nashorn.js:const nashornModule = require(‘../module/nashorn’);npm/test/nashorn.js:log.task(‘Nashorn’);npm/test/nashorn.js:nashornModule.nashornRun(‘jdk1.8.0’);事实上,忽略大小写在这里是有用的。否则,我就会错过require(‘../module/nashorn’)这样的语句。毫无疑问,我应该稍后更详细地检查该文件。2.3 找到非匹配的文件npm/test/目录中是否有一些非Nashorm相关的文件?为了回答这个问题,我们可以使用grep (-L选项)中的“打印非匹配文件”选项

:

找到非匹配的文件

 

sh$ grep -iL nashorn npm/test/*npm/test/builder.jsnpm/test/jasmine-browser-min.jsnpm/test/jasmine-browser.jsnpm/test/jasmine-node.jsnpm/test/jasmine-webpack.jsnpm/test/unsupported-features.js注意如何使用-L选项将grep的输出结果更改为只显示文件名。因此,上面的文件中没有一个包含字符串nashorn(不管是哪种情况)。这并不意味着它们与这项技术没有关系,但至少,字母nashorn不存在。2.4 在隐藏文件中查找内容,并递归地向子目录中查找相关内容最后两个命令使用shell glob模式将要检查的文件列表传递给grep命令。但是,这有一些固有的限制:星号*将不匹配隐藏文件,它也不会匹配子目录中包含的文件。

解决方案是将grep与find命令相结合,而不是依赖于shell glob语法:

# This is not efficient as it will spawn a new grep process for each file这是低效率的,因为它将为每个文件生成一个新的grep进程$ find npm/test/ -type f -exec grep -iL nashorn \{} \;# This may have issues with filenames containing space-like characters这可能与包含空格字符的文件名有关grep -iL nashorn $(find npm/test/ -type f)正如我在上面的代码块注释中提到的,每个解决方案都有缺点。关于包含空格类型字符的文件名,可以研究一下grep -z选项,它与find命令的-print0选项结合使用,可以缓解这个问题。

然而,更好的解决方案是使用grep的“递归”-r选项。有了这个选项,您可以在命令行上给出搜索树的根(开始目录),而不是要检查的文件名的显式列表。使用-r选项,grep将检查搜索目录中的所有文件,包括隐藏的文件,然后递归深入到任何子目录:

grep -irL nashorn npm/test/npm/npm/test/builder.jsnpm/test/jasmine-browser-min.jsnpm/test/jasmine-browser.jsnpm/test/jasmine-node.jsnpm/test/jasmine-webpack.jsnpm/test/unsupported-features.js2.5 根据文件名过滤文件(使用正则表达式)所以,在这个项目中似乎有一些Nashorn具体测试。由于Nashorn是Java,另一个可能提出的问题是“项目中是否有一些Java源文件明确提到了Nashorn?”

根据当前使用的grep版本,至少有两个解决方案可以回答这个问题。第一个是使用grep查找包含nashorn的所有文件,然后将第一个命令的输出重定向到第二个grep实例中,过滤掉非java源文件:

sh $grep -ir nashorn ./ | grep “^[^:]*\.java”./spec/nashorn/AsciidoctorConvertWithNashorn.java:public class AsciidoctorConvertWithNashorn {./spec/nashorn/AsciidoctorConvertWithNashorn.java: ScriptEngine engine = engineManager.getEngineByName(“nashorn”);./spec/nashorn/AsciidoctorConvertWithNashorn.java: engine.eval(new FileReader(“./spec/nashorn/asciidoctor-convert.js”));./spec/nashorn/BasicJavascriptWithNashorn.java:public class BasicJavascriptWithNashorn {./spec/nashorn/BasicJavascriptWithNashorn.java: ScriptEngine engine = engineManager.getEngineByName(“nashorn”);./spec/nashorn/BasicJavascriptWithNashorn.java: engine.eval(new FileReader(“./spec/nashorn/basic.js”));现在应该可以理解命令的前半部分了。但怎么理解“^[\^:]*\\.java”这部分呢?

除非指定-F选项,否则grep假设搜索模式是一个正则表达式。这意味着,除了与逐字匹配的普通字符之外,您还可以访问一组元字符来描述更复杂的模式。我上面使用的模式将只匹配:^表示行的开头[^:]*后跟除冒号外的任何字符序列.后跟一个点(点在regex中有特殊的含义,因此我必须使用反斜杠来保护它,以表示我需要文字匹配)在本实例中,由于grep将使用冒号将文件名与上下文分隔开,因此在filename部分中只保留具有.java的行。值得一提的是,它还可以匹配.javascript文件名。2.6 使用`grep`按文件名过滤文件递归搜索带nashorn关键内容的文件,忽略大小写,并且文件名以.java结尾。

sh$ grep -ir nashorn ./ –include=’*.java’./spec/nashorn/AsciidoctorConvertWithNashorn.java:public class AsciidoctorConvertWithNashorn {./spec/nashorn/AsciidoctorConvertWithNashorn.java: ScriptEngine engine = engineManager.getEngineByName(“nashorn”);./spec/nashorn/AsciidoctorConvertWithNashorn.java: engine.eval(new FileReader(“./spec/nashorn/asciidoctor-convert.js”));./spec/nashorn/BasicJavascriptWithNashorn.java:public class BasicJavascriptWithNashorn {./spec/nashorn/BasicJavascriptWithNashorn.java: ScriptEngine engine = engineManager.getEngineByName(“nashorn”);./spec/nashorn/BasicJavascriptWithNashorn.java: engine.eval(new FileReader(“./spec/nashorn/basic.js”));2.7 查找关键字精确匹配关键字-w选项,i忽略大小写,指定文件后缀*.js,搜索关键字opal。

sh$ grep -irw –include=’*.js’ Opal .2.8 输出结果带颜色选项–color为匹配选项着色。

sh $grep -irw –color=auto –include=’*.js’ Opal .2.9 统计匹配内容的行数为匹配内容统计行数:

sh$ grep -irw –include=’*.js’ Opal . | wc -l86

这意味着我们在所有检查的文件中总共有86行匹配的行。然而,有多少不同的文件是匹配的?使用-l选项,您可以限制grep输出匹配的文件的数量,而不是显示匹配的行数。因此,这个简单的改变将告诉有多少文件是匹配的:

sh$ grep -irwl –include=’*.js’ Opal . | wc -l20

如果这让您想起了-L选项,那么毫无疑问:因为它比较常见,所以小写/大写用于区分相反作用的选项。-l显示匹配的文件名。-L显示不匹配的文件名。另一个例子,我让您检查手册中的-h和-h选项。

选项-c统计匹配的次数。

grep -irwc –include=’*.js’ Opal .3. 总结grep命令参数一览-a 或 –text : 不要忽略二进制的数据。-A<显示行数> 或 –after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。-b 或 –byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。-B<显示行数> 或 –before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。-c 或 –count : 计算符合样式的列数。-C<显示行数> 或 –context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。-d <动作> 或 –directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。-e<范本样式> 或 –regexp=<范本样式> : 指定字符串做为查找文件内容的样式。-E 或 –extended-regexp : 将样式为延伸的正则表达式来使用。-f<规则文件> 或 –file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。-F 或 –fixed-regexp : 将样式视为固定字符串的列表。-G 或 –basic-regexp : 将样式视为普通的表示法来使用。-h 或 –no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。-H 或 –with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。-i 或 –ignore-case : 忽略字符大小写的差别。-l 或 –file-with-matches : 列出文件内容符合指定的样式的文件名称。-L 或 –files-without-match : 列出文件内容不符合指定的样式的文件名称。-n 或 –line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。-o 或 –only-matching : 只显示匹配PATTERN 部分。-q 或 –quiet或–silent : 不显示任何信息。-r 或 –recursive : 此参数的效果和指定”-d recurse”参数相同。-s 或 –no-messages : 不显示错误信息。-v 或 –revert-match : 显示不包含匹配文本的所有行。-V 或 –version : 显示版本信息。-w 或 –word-regexp : 只显示全字符合的列。-x –line-regexp : 只显示全列符合的列。-y : 此参数的效果和指定”-i”参数相同。本文已同步至博客站,尊重原创,

本文来自投稿,不代表展天博客立场,如若转载,请注明出处:https://www.me900.com/323691.html

(0)

相关推荐

  • 侠盗猎车罪恶都市任务攻略,侠盗猎车罪恶都市完整版任务

    侠盗猎车罪恶都市任务攻略,侠盗猎车罪恶都市完整版任务侠盗猎车罪恶都市任务攻略,侠盗猎车罪恶都市完整版任务侠盗猎车罪恶都市任务攻略,侠盗猎车罪恶都市完整版任务侠盗猎车罪恶都市任务攻略,侠盗猎车罪恶都市完整版任务

    虽然玩 Rockstar 游戏本身就很有趣,但关于 GTA:罪恶之城有几个奇怪的事实,许多游戏玩家都不知道。其中一些涉及游戏的结果,而另一些则涉及特定决定的后果。 无论哪种方式,你都会喜欢这10 个关于侠盗猎车手:罪恶都市的有趣事实。我们把我们最喜欢的复活节彩蛋留到了最后。很明显,Rockstar Games 和我们一样喜欢玩文字游戏。 GTA:罪恶都市几乎…

    2023-07-08 用户投稿
  • 丢失32年的西安娃认亲视频

    丢失32年的西安娃认亲视频丢失32年的西安娃认亲视频丢失32年的西安娃认亲视频丢失32年的西安娃认亲视频

    这是一场期盼了32年的认亲。 在现场,61岁的李静芝的一声,“孩子,我终于找到了你了!”惹哭了所有人,她自己哭了,她已经34岁的儿子哭了,公安民警哭了,媒体记者也哭了。     那就哭吧,这是一个值得哭的时刻。 仅仅1分钟的时间 2岁半孩子丢失 1988年10月17日,在西安西大街的金陵酒店(现陕西省地方志馆附近),李静芝的丈夫老毛带着儿…

    2023-06-06 用户投稿
  • 生子报喜短信,孩子出生说说报喜短信

    昨天孕妈群里,有一个妈妈生了孩子,结果孩子的爸爸就在群里广发信息说:刘家建设银行于2017年10月13号上午十点八分正式开业了,持有招商银行执照的请马上开始拿号排队,先到先得,走过路过,千万不要错过。 看到这位爸爸报喜的内容,瞬间就被逗笑了,也觉得很有个性,大家也是在群里,祝福声一片片。其实有个性的报喜方式,不光是他们一家,还有更加个性的报喜方式呢,不信都来…

    2023-07-04
  • 移动大王卡爱奇艺免流(移动大王卡19元申请入口)

    移动大王卡爱奇艺免流(移动大王卡19元申请入口)移动大王卡爱奇艺免流(移动大王卡19元申请入口)移动大王卡爱奇艺免流(移动大王卡19元申请入口)移动大王卡爱奇艺免流(移动大王卡19元申请入口)

    我国通信行业的三大运营商分别是:中国移动、中国联通、中国电信。大家对这三大运营商的评价褒贬不一,有人说中国联通信号不好;有人说中国移动资费高;还有人说中国电信上网速度慢。正所谓人无完人,根据每个运营商的发展历程不同,当然会有很多不尽人意的地方。就拿中国电信来说,中国电信最初是没有移动业务的,还是当时工信部对几家运营商的业务重组,才把部分CDMA网络交给电信来…

    2023-05-24 用户投稿
  • win7电脑恢复无线上网需要启动哪些服务项呢

    Windows7 无线不能上网,经过排查发现是WLAN autoconfig 这服务没有启动,驱动正常,当我们启动这个WLAN autoconfig 服务的时候,提示我们依赖的服务没有启动,错误代码1068,我们启动其他的相关联的服务的时候,也是无法启动,同时也有各种错误代码提示,都不让我们启动如何操作呢? 重新安装操作系统是最好的解决方案,有时我们有很多应…

    2023-07-07
  • 黄金鳖长什么样子(黄金鳖吃什么东西)

    黄金鳖长什么样子(黄金鳖吃什么东西)黄金鳖长什么样子(黄金鳖吃什么东西)黄金鳖长什么样子(黄金鳖吃什么东西)黄金鳖长什么样子(黄金鳖吃什么东西)

    鳖,学名甲鱼,又称王八、团鱼和水鱼等,是一种卵生两栖爬行动物。野生老鳖主要栖息在水库、湖泊、池塘,以及水流较缓的河流里。 然而,由于野生老鳖的经济价值较高,因此被大肆捕捞,所以如今要想在自然水域,要想看到真正的野生鳖非常难。 不过,最近一位江西南昌钓鱼人,却钓起了一只野生大老鳖,而且还是罕见的“金鳖”,有人想出高价购买。 (南昌钓鱼人钓获的黄金鳖) 一、野钓…

    2022-05-05 用户投稿
  • 拼多多领100元红包怎么操作更快,拼多多领100元红包怎么操作更快一点

    《拼多多领100元红包怎么操作更快?》 在如今的电商时代,拼多多以其低价商品和丰富的活动吸引了众多消费者。 而领100元红包这样的活动更是让人心动,那么如何操作才能更快地领取到这100元红包呢?接下来我将为大家详细介绍。 一、了解拼多多领红包活动的规则 也许很多人在领取红包时,并没有仔细去了解活动的规则,这可能会导致一些不必要的麻烦。 我觉得我们首先要清楚红…

    2025-04-27
  • 垂直搜索,如何烹饪香草蛋糕:指南和秘诀

    材料: 蛋黄面糊:蛋黄3个;细砂糖20克;水30毫升;色拉油30克;天然香草油适量;低筋面粉50克; 蛋白霜:蛋清3个;细砂糖30克; 做法: 1。准备材料,将蛋黄、蛋白分离在无油无水的容器中; 2。蛋黄中加入细砂糖,用打蛋器搅拌均匀; 3。加入水搅拌均匀; 4。加入色拉油搅拌均匀; 5。加入香草油搅拌均匀; 6。过筛如1/2的低粉搅拌均匀; 7。搅拌至面糊…

    2023-05-20
  • 大骨节病的治疗,手指大骨节病如何治疗

    地方病患者治疗管理办法 根据《地方病防治专项三年攻坚行动方案(2018—2020年)》中关于“做好现症地方病病人确诊病例治疗和社区管理”的相关要求,对有治疗意愿且符合治疗条件的大骨节病、氟骨症和克山病患者进行救治,为保证患者治疗项目的顺利开展,制定本办法。  一、工作目标  将大骨节病、氟骨症和克山病患者纳入慢性病管理,在尊重患者意愿的基础上,应治尽治,提高…

    2023-06-24
  • 江西省内最佳十条自驾游线路(江西省自驾游经典路线)

    江西省内最佳十条自驾游线路(江西省自驾游经典路线)江西省内最佳十条自驾游线路(江西省自驾游经典路线)江西省内最佳十条自驾游线路(江西省自驾游经典路线)江西省内最佳十条自驾游线路(江西省自驾游经典路线)

    江西精华自驾路线有哪些?江西省内8条精华自驾路线地图攻略推荐,下面一起来看看吧。心中最中意哪条路线呢? 1,环鄱阳湖自驾路线: 鄱阳湖,古称彭蠡、彭蠡泽、彭泽,位于江西省北部,地处九江、南昌、上饶三市,是中国第一大淡水湖,也是中国第二大湖,仅次于青海湖。全程516公里。 自驾路线:九江–湖口–都昌(老爷庙、、南叽山–鄱阳(…

    2023-06-11 用户投稿
  • 卓伟娱乐圈就两个人干净 ,卓伟爆出白百何出轨之后怎么了

    前不久不可忽视的娱乐圈大事件就是白百何出轨门,卓伟爆出白百何出轨之后,更是在娱乐圈开始黑一众明星。 别的不说,单是看看她带过的艺人,李冰冰、任泉、胡军、范冰冰等,以及她“内地第一经纪人”的名号,就知道她在经纪人在这个行业绝对是翘楚。经纪人的能力不仅体现在对艺人的定位、资源的处理方面,更体现在突发事件的应对上,比如白百合事件就体现了王京花高超的公关能力。 首先…

    2023-06-20
  • 如何推广自己的品牌(品牌推广渠道有哪些)

    品牌营销成功的关键在于是否能够找到差异化的个性以及感染消费者的内心。它使得消费者明确、清晰识别并记住这个品牌的利益点和个性,才是驱动消费者认同乃至喜爱上品牌的主要力量。 而品牌包含了有形产品与无形的服务,有形产品主要指的是包装的新颖独特和富有象征吸引力的名称等。无形的服务是在销售过程中或是销售服务的时候留给用户的满意的感觉。那么我们在品牌推广的时候,如何才能…

    2021-11-04