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)

相关推荐

  • dota2配置要求,dota2对cpu和显卡哪个要求高

    本次7.0大版本更新,进行了许多游戏机制、游戏性上的更新,虽然并没有对整个游戏做出巨大的调整,不过根据多方面实测,本次7.0的配置要求要比之前提高不少,具体需要等待官方给出消息。 以玩家分享的两年前主力950m测试结果为例,6.88F版本1080P关闭垂直同步,泉水60帧,线上50多帧,10人打团也有35以上,而测试服上开了吧疯狂人机,妈呀,泉水就40帧了,…

    2023-07-10
  • 加拿大华裔争车位被打,女子占车位被豪车

    综合外媒报道,近日,两名华裔男子在加拿大街头为争夺停车位大打出手,最终在警察的介入下才罢手。这一过程被拍成视频在网上疯传,引发了众多网友的热议。 事发地在加拿大温哥华第一大道商场附近,这一区域聚集着超市和众多餐馆,平时人流量很大,车位相当紧张。 当地时间1月26日中午12点左右,互殴的两人开着车来到事发停车场。其中一方正在试图将车停进停车位时却被另一方抢先驶…

    2023-07-04
  • 百度快照怎么用,如何使用百度快照加快搜索结果查看

    近期,百度搜索结果中百度快照的按钮没有了,很多的网友都在找这是什么原因造成的?百度搜索结果中的百度快照这个功能是多年来很多网友都在使用的方式,可以帮助网名查看网页的历史记录。 不过小编了解到,网页快照服务的消失,原理是这样的: 在网页前期,网站站点经常出现不稳定的现象,因此特设置可快照的功能,通过抓取闭关保存来保存网络的关键内容,开保障用户的搜索体验,但是随…

    2023-05-22
  • 视频服务器架设,视频服务器架设在哪里

    《视频服务器架设:从入门到精通》 一、视频服务器的基本概念视频服务器,也许可以理解为一个专门存储和传输视频数据的设备或系统。它就像是一个大型的视频仓库,能够将大量的视频文件存储起来,并通过网络将这些视频发送给需要观看的用户。就好像我们家里的硬盘可以存储各种文件一样,视频服务器也是用来存储视频文件的,但它的规模和性能要大得多。 二、架设视频服务器的前期准备1.…

    2025-11-11
  • 少将和大校哪个大 你更喜欢少将还是大校

    如今,人民解放军的军官中,右胸佩戴的色条、级别组成的“级别略章”一目了然,这也是在2007年“解放军服装制度改革”之后的事情。 而在2007年以前,军官的级别只能在人事档案和财务机关的发放表格中看,其他局外人一般也不了解,所以社会上也经常搞错这些事。 军官的**具体有两个区分标准,一个是“职务”,另一个则是“军衔”。 若军衔能到达少将的位置,就已经是将军了,…

    2023-06-03 用户投稿
  • 品牌推广的具体方法,品牌推广渠道有哪些

    免责声明:媒体大喇叭——全媒体自助发稿平台,仅提供技术服务协助发布。本文观点不代表我方立场。海量媒体发布就上www.meitilaba.com 以下为文章正文 媒体大喇叭支持全媒体自助发稿,仅提供技术服务协助发布,本文观点仅供参考。 品牌推广的渠道有哪些,很多人都不知道,今天我们就来聊聊。 先来看一下百度推广和搜狗推广两个平台,在搜索引擎的推广上,用户搜索百…

    2023-07-03
  • 吸笑气后女生的生理反应(吸笑气什么反应)

    现代快报讯(通讯员 宝工轩 记者 顾潇)女子在朋友怂恿下吸食“笑气”,从此一发不可收拾,有时一次性能吸食200多支。当民警找到她时,她刚刚吸完“笑气”,意识模糊,甚至连腿都“瘸”了。 4月7日上午,宝应县公安局氾水派出所民警发现了一辆小轿车,周边散落着好几个迷你“小钢瓶”。警惕的民警立即对现场进行调查,结果在车内发现大量迷你“小钢瓶”,其中有部分已经被使用过…

    2022-05-05
  • 简单的点心,双色糕点的做法大全

    教你几款颜值超高的点心,太简单!家里有个锅就可以做 特别简单的一款小点心,颜值却很高! 【准备食材】:紫薯2个、红薯1个、蜂蜜适量(我用的是洋槐蜜)、椰蓉适量 【操作方法】:详细原文点这里可查看 1、紫薯和红薯分别蒸熟,去皮,压成泥; 2、紫薯泥中加一大勺蜂蜜,红薯泥中加半勺蜂蜜;分别搅拌均匀(量随你意,也可加入牛奶、果酱、糖等你喜欢的); 3、分别将红薯泥…

    2023-07-07 用户投稿
  • 服务器负载不兼容,服务器网络消息列表不兼容

    企业网站维护教程。之前悦然wordpress建站的一个wp商城网站建设项目遇到了一个数据库链接失败的问题,网站各项配置都是正确的,前台浏览也没有问题,可一但网站开始编辑产品,那么网站就很有可能出现数据库链接失败的提示,网站没办法打开。 下面给大家分享解决方法:   经过排查发现是服务器负载过高,如上图所示,宝塔面板上显示都出现了红色警告了。这种情况…

    2023-06-28
  • 云南虚拟主机,云主机 虚拟主机

    《云南虚拟主机:从基础到进阶的全面解析》 一、什么是云南虚拟主机? 也许在很多人的印象中,虚拟主机就像是互联网世界中的一个小“房间”,它为网站提供了一个栖息之地。而云南虚拟主机,顾名思义,就是在云南地区的虚拟主机服务。 就好像你在云南的某个城市租了一套房子,这个房子就是你的虚拟主机,你可以在里面放置你的网站文件、数据库等,让你的网站能够在互联网上展示给其他人…

    2025-08-11
  • 个人创业有什么好项目(有什么小型创业项目)

    由于疫情尚未彻底消除,目前的创业环境相对比较恶劣。在这种情况下,想要创业赚大钱需要更加谨慎,切不可盲目投资,否则一旦创业失败,很可能很多年都翻不过身来。   下面为大家总结十个未来两年适合普通大众的创业项目。虽然这些项目技术含量并不高,但是只要把项目做好,仍然能够赚很多钱。   第一 短视频电商     现在是短视频十分火爆的时代,各大短视频平台吸…

    2021-10-29 用户投稿
  • 专注于接口自动化测试的管理平台,多协议接口测试灵活多变

    一、开源项目简介专注于接口自动化测试的管理平台,MasterYi Interface Automated Test Platform。二、界面展示模块图-流程图-测试框架图 系统截图有些截图是老版本的,也是之前公司用过的,有兴趣的可以自行去演示站点体验。接口管理 接口参数 测试数据 验证规则 组合场景 组合场景配置 测试集管理 测试执行 定时任务 测试报告 …

    2023-07-04 用户投稿