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)

相关推荐

  • 广州花卉市场批发市场(球菊哪个颜色最有观赏性)

    买年花是广州市民过年的必备项目之一,家家户户、商场企业都会在农历新年前夕装置年花,讨个好彩头,寓意花开富贵。每逢农历新年前夕,位于广州市荔湾区的岭南花卉市场人气逐渐热闹,作为我国大型的花卉综合零售批发市场之一,岭南花卉市场的动态可以反映年花价格和销售趋势。1月4日,羊城晚报记者走访岭南花卉市场发现,以进口花种种植的蝴蝶兰价格比去年上涨约15-20元,而本地桃…

    2023-06-14 用户投稿
  • windows8 激活,win8激活工具永久激活

    IT之家 6 月 1 日消息,今日 NTDEV(@NTDEV_)发布了轻量级 Windows 10 系统 Tiny10 的新版本,名为 tiny10 23H1 x64,支持 64 位系统,占用空间小,更新速度快,适合低端硬件运行。 据悉,tiny10 23H1 x64 是在今年年初发布的 tiny10 2303 x86 的基础上开发的,后者只支持 32 位系…

    2023-06-28
  • 胡可小鱼儿最新身高,沙溢小鱼儿多大

    沙溢的小儿子小鱼儿是非常的可爱机灵,每次看到他的出现完全可以用调皮两个字来形容他。毕竟小鱼儿是一个非常喜欢搞怪的小孩,喜欢表情动作,他与哥哥安吉性格不同。小鱼儿给网友的感觉就是比较活泼,然而安吉给网友的感觉就是,比较有思想和沉稳。 近日看到沙溢晒出小儿子小鱼儿的视频,视频中的小鱼儿也是喜欢搞怪的表情,小鱼儿在沙溢的镜头下做出了很浮夸的表演,翻白眼。其实这样的…

    2023-07-04
  • 国际足联年度最佳球员奖(Fifa金球奖2023颁奖时间)

    北京时间今天凌晨进行的国际足联颁奖典礼,梅西荣膺国际足联年度最佳球员,职业生涯第6次获得国际足联评选的年度最佳,高居历史第一! 梅西在评选中击败了范戴克和C罗,四年后再次获奖。过去一个赛季,尽管巴萨没能夺得欧冠冠军,但是球队继续卫冕西甲冠军,梅西个人成绩闪耀光芒,50场比赛贡献51球22助攻,包揽欧冠最佳射手和欧洲金靴奖。同时,梅西也在国际足联评奖的三个时代…

    2023-06-13
  • 淘金币全额兑换网址,淘金币兑换活动太火爆了

    《淘金币全额兑换网址及相关事宜》 在如今的电商时代,淘金币无疑是众多消费者和卖家都非常关注的一个元素。 淘金币全额兑换网址更是大家常常提及的话题,那么这个网址究竟是什么样的呢?它又有哪些特点和作用呢?接下来,让我们一起深入探讨一下。 一、淘金币全额兑换网址的基本概念 也许你会好奇,淘金币全额兑换网址到底是指什么呢?简单来说,它就是一个专门用于淘金币全额兑换商…

    用户投稿 2025-04-04
  • 中国沙糖桔产地在哪里,砂糖橘是哪里的产地

    砂糖橘个头玲珑,皮薄,色泽橙黄非常惹眼,汁多化渣,口感细腻味甜如砂糖,每年的春节前后,我一定会买一些砂糖橘,无论是春节待客还是自己吃,都会让人垂涎。 砂糖橘橙黄的色泽,摆放在家里的茶几上,特别是春节的时候,给人来年红红火火的寓意,我喜欢在春节的时候看着家里红红火火、热热闹闹。 还记得小的时候,家里的长辈说,最好吃的柑橘是芦柑,我也吃过,色泽不好看、外观也有点…

    2023-06-29 用户投稿
  • 虐杀原形修改器怎么用,虐杀原形最强修改器

    虐杀原形2是虐杀原形的续作,2代在剧情和角色上面并没有沿用1代,游戏中新增了大量新角色以及剧情,而且还可以使用手柄进行游戏,玩家可以使用手柄补丁增强游戏的强度,下面6399小编为大家带来手柄补丁使用教程,希望对大家有用。 模拟360的手柄驱动 在xbox360cemu.ini 文件中,把UseForceFeedback=1 改为 UseForceFeedba…

    2023-07-12
  • lol6300英雄推荐 你最喜欢哪位LOL6300英雄

    在LOL里,金币6300的英雄是最贵的一个档位,而且因为英雄的轮番重做,很多英雄的身价也是倍增了不少,那么在你玩LOL这些年中,你买过的最贵6300是哪位呢? 这是一个很有意思的话题,我们来看看网友们是怎么说的吧? 最值的6300。也是第一个。就是亚索呀。从此之后匹配进去秒选,然后最后时间到了再换其他要玩的英雄。从此之后就没有自己家的亚索了。多值得!!! 当…

    2023-06-06
  • 小学生创新作文网(实施四质工程,培育时代新人心得体会)

    为进一步丰富校园文化生活,激发学生的写作兴趣,提高学生的习作水平和语文素养,营造良好的读书、习作氛围,4月6日,巴中市南江县沙河镇乐坝小学根据上级文件要求组织二至六年级178名学生参与第十九届全国创新作文征文初赛活动。各班根据活动组织方设置的不同的写作要求,积极、认真筹备此次征文活动。 在作文竞赛过程中涌现出了许多写作小能手。一篇篇文章书写工整,内容真实,情…

    2023-05-29
  • 洗衣机如何消毒,洗衣机消毒杀菌剂哪种好

    洗衣机一定要定时清洗,毕竟洗衣机在使用时间长之后很容易滋生细菌,一般来说洗衣机每隔三个月应该做一次消毒处理,那么洗衣机消毒杀菌用什么?消毒液那个牌子好?今天就由苏州装修网给大家详细说明,希望大家 喜欢。 洗衣机消毒方法 1、漂白剂 使用漂白剂对洗衣机杀菌, 我们必须先在洗衣机中接入半桶清水,之后再兑入大约400ml大约的漂白剂,同时将其加热均匀分布,之后开启…

    2023-07-09
  • dota2更新,dota2后期英雄排行

    《DOTA2》今日公开了7.30版本游戏性更新内容,其中包含全新、重做的英雄技能,新天赋、魔晶和神杖,全新中立物品等许多内容。本次补丁也意味着天陨旦活动已经结束。 本次更新后,圣水神符的治疗效果从80点生命减少至40点生命,中立生物现在每级掉落5件中立物品,基础生命恢复为0的所有英雄的生命恢复效果提升至0.25,队长模式的第二个挑选阶段从夜魇/天辉/夜魇/天…

    2023-07-11
  • 二次元害人案例,二次元祸害青少年

    确实是没想到,因为最近来自上头的某篇文章,二次元又以“有毒与否”上了热搜。 上次是游戏,再上次还是二次元。当我们以为下一次总该轮到短视频的时候,没想到溜了个弯,这罪名又轮到二次元戴上了。不知道短视频该不该感谢一下二次元捏。   (我想许多朋友大概都看过 这篇相当“稚嫩”的文章了) 也不是要给“二次元”做什么辩解。毕竟若要追根溯源谈及商业利益,那二次…

    2023-07-12 用户投稿