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)

相关推荐

  • 除斑偏方,有效的祛斑小偏方

    现代生活节奏快,工作压力也大,内分泌失调或失眠也都普遍存在,针对起痘痘的脸部,要怎样护理才能在短时间内见到效果呢?今天海燕给大家推荐3种祛痘祛斑的老偏方。 龙爪菊汁液敷脸 材料:一片龙爪菊 做法:睡觉前,洗净脸后,把龙爪菊叶洗净,从中间切开,用里面的嫩肉擦拭额头或面部,晒干后反复再擦拭,直到面部形成一层淡黄色的薄膜为止。 温馨提示:使用之前,先在手上涂一点汁…

    2023-06-30
  • 中国十大不能纹的纹身(纹身十大禁忌)

    很多人都喜欢追求时尚感潮流感,而纹身也是一直以来代表的个性叛逆的存在,而很多人都会喜欢上了纹身,但是并非所有的纹身都是适合纹的,那么你知道哪些纹身是不够纹吗?世界十大禁忌纹身你可否知道?下面一起来看看吧。 关于纹身的几大忌讳: 1、关公:历来就有镇邪驱灾的说法,但是不是谁都可以文的。讲究一个“扛”或者“背”。有的人扛不住,那就是适得其反,保不了你不说,反而多…

    2022-05-06
  • 光盾专属有必要升级吗,护体神盾怎么升级

      黑暗光年(同名白蛇传奇/洪荒传奇/一剑屠龙/西游传奇/天战传奇/苍穹灭/域极天下/皓月屠龙/王者光辉/奔雷无双)三端互通折扣手游,今天小编给大家讲解下护体神盾的攻略,黑暗光年新区折扣滴滴,地仙只需1320 护体神盾主要的作用就是提升生命值和格挡部分的伤害,三级的护体神盾可以获得25%的生命值加成以及有概率格挡次数,随着**的提升,满级的护体神盾…

    2023-07-13
  • 赛尔号米咔超进化(赛尔号星球大战米咔怎么超进化)

    如果你玩过赛尔号这款游戏或者说看过这部动漫,那么我相信你总有几个印象深刻的精灵,这些精灵或者是你花费了很多经历才获得的,亦或者说它们曾经陪着你在赛尔号的世界中呼风唤雨。那么你对米咔 这个可爱萌系的精灵有那些 有那些印象呢?最近关于这个精灵将会再迎完全体的消息不断,我们一起来看看吧! 米咔是赛尔号动漫中非常重要的一只光系精灵,很多观众都说这个精灵和圣灵系的谱尼…

    2022-05-06 用户投稿
  • 安康小吃特产有哪些,安康特色十大小吃

    安康,地如其名,地处秦巴,三秦大地,汉水横贯东西,绝对称得上是物华天宝,安康也有极具特色的小吃,每一种小吃都称得上是一绝,看看你吃过哪几种? 1.安康蒸面,是陕西省安康市的著名特色小吃之一。只要是安康人,就没人没吃过安康蒸面。制作时,把面粉加水和少许盐,调成面浆放入锅中蒸熟,用刀切成面条。食用时,配以豆芽、芹菜、黄瓜丝等作辅菜,再加上用食醋、酱油、鸡精、味精…

    2023-07-06
  • 甲午大海战电影(甲午大海战电影观后感1000字)

    2015 年11 月4 日,国家文物局、中国社会科学院考古研究所、中国文化遗产研究院、北京大学、中国人民解放军总装备部、海军军事学术研究所、中国人民革命军事博物馆、中国甲午战争博物馆、中船重工701 所等多个单位各个领域的专家,确认辽宁丹东港大东沟海域发现的“丹东一号”沉船,应为1894 年甲午海战中北洋舰队的“致远”舰, 并计划将其整体打捞出水。此前,20…

    2023-05-28 用户投稿
  • 对中国史学史的看法,中国史学史对历史学科的意义

    徐良高 本文的史学是指广义的历史学,既包括传统的文献史学,也包括近代兴起的考古学,两者各有特色,相辅相成,构成历史学的全貌。 对历史学学科意义的深入全面理解有助于我们认清其社会作用和存在价值,发现史学长盛不衰的原因,明确史学研究的目的与动力来源,进而推动史学的发展与史学成果的传播。 那么,历史学都有哪些价值与意义呢?关于历史学的价值和意义,古今中外的论述非常…

    2023-07-12
  • 键盘指法练习,26字母键盘指法训练

    如果你要想打字快,指法一定要对,要确定左右手的食指分别要放到F键和J键上,然后依次排开。用打字软件来练习,上面有标准的指法位置图,并且有相应的训练软件。无论打什么字,打多么慢,都要按照标准的指法来进行练习。每天打字的时候,都不要看键盘,而是试着摸索着按键盘。不管你是学拼音打字还是学五笔打字、英文打字这个都是基础、是必过的关!   大道至简、练习快速…

    2023-06-24
  • 诺佛沙星胶囊,蒙脱石散和诺氟沙星的区别

    中新网1月4日电 近日,网传奥密克戎XBB变异株会引发呕吐和腹泻症状,传言截图中提及的“蒙脱石散”“诺氟沙星”等相继引发关注登上热搜,不少药店显示蒙脱石散、诺氟沙星“补货中”。 3日,2023年首个交易日,A股蒙脱石散概念股亦全线高开,康芝药业、仟源医药、方盛制药等相关个股涨停。 XBB有关的截图,致蒙脱石散、诺氟沙星等突然爆火 据媒体报道,这波蒙脱石散爆火…

    2023-07-04
  • 大明湖畔在哪(邯郸大明湖畔在哪)

    最近重温电视剧《还珠格格》,发现了一些有意思的细节。 比如,当紫薇见到乾隆皇帝后,以无比幽怨的眼神看着他,还说了一句话:“皇上,您还记得大明湖畔的夏雨荷吗?”这句话知名度极高,都成网络流行语了。 当然,这是有故事的。当年,乾隆皇帝在南下视察工作时,认识了山东姑娘夏雨荷。两人相爱了,作出了难以描述之事。后来,乾隆皇帝离开了山东,离别时答应夏雨荷,以后会来找她,…

    2022-05-05 用户投稿
  • nod32 id获取器,获取id失败怎么回事

    《关于“nod32id获取器”的深入探讨》 一、什么是nod32id获取器? 也许你会好奇,nod32id获取器究竟是什么东西呢?从字面意思来看,它似乎是与nod32这款杀毒软件相关的一个工具,用于获取nod32的某种特定标识或ID信息。就好像我们每个人都有自己的身份证号码一样,nod32也可能有这样一个唯一的标识来区分不同的安装或使用情况。 我觉得它可能在…

    2025-10-28
  • 碧雪情天,古剑奇谭二角色介绍

    又是一周好时光,本周推荐的手游佳作种类十分丰富,不仅有页游IP的手游版,还有充满神话色彩的《古剑奇谭二》以及二次元感满满的《启源女神》等游戏,大家可不要错过了。 本周推荐试玩:启源女神《碧雪情天3D》 —— 开测日期:12 月 7 日硬派3D东方奇幻MMORPG手游《碧雪情天3D》于今日开启首次删档测试,这款继承《碧雪情天》原班内容,打造的神魔武侠MMO手机…

    2023-07-05 用户投稿