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)

相关推荐

  • iphone备份文件在哪,苹果数据备份怎么恢复

    iphone备份文件在哪,苹果数据备份怎么恢复iphone备份文件在哪,苹果数据备份怎么恢复iphone备份文件在哪,苹果数据备份怎么恢复iphone备份文件在哪,苹果数据备份怎么恢复

    苹果手机在日常使用过程中,遇到iPhone内存不足清理数据时,可能会误删了照片、备忘录、文件等数据。   或是iPhone遇到白苹果、恢复模式、闪退、黑屏等故障时,手机数据又无法移动的情况。           如今手机记录着我们的日常生活,里面保存着很多重要的照片、视频、备忘录等数据,养成定期进行…

    2023-07-12 • 用户投稿
  • 金华体育中心隆重举行开幕式活动

    金华体育中心隆重举行开幕式活动金华体育中心隆重举行开幕式活动金华体育中心隆重举行开幕式活动金华体育中心隆重举行开幕式活动

    浙江省第十七届运动会开幕式将于11月18日晚8点在金华体育中心隆重举行开幕式将全面展现“诗画江南、活力浙江、魅力金华” 的崭新气象和“八八战略”“两个先行”的生动实践全方位展示浙江体育事业的丰富多彩和蓬勃发展届时大家可以通过以下平台收看直播 扫一扫下载金华新闻客户端 省运会开幕式上将有哪些精彩看点?开幕式总导演邓锐斌,策划、总撰稿乔卫,总导演、制作人谢海涛以…

    2023-06-07 • 用户投稿
  • 最好的反黄APP(最好的反黄游戏)

    【手机中国新闻】7月26日早些时候,就有相关媒体就报道称,在苹果的应用商店中,出现了大量套着马甲的手机APP,它们从图标和APP名称等地方看上去都没有什么问题,但是如果用户进行下载,并点开这些APP,就会发现其内部充斥着大量的不良内容。并且,这样的问题APP还远远不止一款,甚至连一些游戏都存在这方面的现象。截止手机中国发稿前,这一词条在微博上已经吸引了超过2…

    2023-05-28
  • 如何正确包扎伤口的步骤教程

    血液是维持生命活动的宝贵液体,遭遇开放性创伤伴活动性出血时,有效止血能减少出血,防止休克,为抢救赢得更多时间。 手足无措的慌乱处置可能会带来严重的后果。今天,我们跟着西安市红会医院急诊科,学习一些快速、准确的止血方法和步骤,关键时刻不慌乱。 常见的外伤出血有哪些? 动脉出血 因外伤所致动脉破裂时,血流呈鲜红色的喷射状流出,失血量多,危害性大,若不立即止血,会…

    2023-05-23
  • 移动有没有流量卡(移动有没有流量卡买)

    进入5G时代后,三大运营商的“抢客户”大战愈演愈烈。以中国移动为例,今年不少地区的用户都收到了他们打来的定向营销电话,免费送给客户10GB的流量,为期三个月。 但就是这样一个看似很给力的行为,却引发了一段争议。原来,这10个G的流量是5G网络定向流量,也就是说必须是5G手机才能使用,并且即便是5G手机,也需要手动开启5G网络才行。 这意味着,像近两年华为推出…

    2023-05-28
  • 去哪里可以添加母婴群(最新母婴群二维码)

    去哪里可以添加母婴群(最新母婴群二维码)去哪里可以添加母婴群(最新母婴群二维码)去哪里可以添加母婴群(最新母婴群二维码)去哪里可以添加母婴群(最新母婴群二维码)

    现在母婴市场竞争激烈,母婴店的生意,一直被电商蚕食。越来越多导购,开始选择在微信、互联网上卖货。于是,通过微信争夺用户,成为了新的战场。 在微信营销中,微信群就好比一个个的池塘,而我们要做的是,找到适合自己的池塘并混进去,再把群里的用户转化成自己的好友,最终成交。 问题来了,我们如何找微信群?到哪找到合适的微信群?因此,小童在这里分享“找群加群的5大渠道”,…

    2021-11-02 • 用户投稿
  • 中国短道速滑队最新消息比赛

    中国短道速滑队最新消息比赛中国短道速滑队最新消息比赛中国短道速滑队最新消息比赛中国短道速滑队最新消息比赛

    你永远可以相信中国短道速滑队!” 当王濛在解说中的这番呼喊迅速“刷屏”朋友圈,并且占领社交网络的头条位置,它成功“破圈”的原因不仅是王濛本身带有魔性的“唠嗑式解说”,更是因为在这个夜晚,中国速滑队成了一股精神力量的象征。 中国队登上最高领奖台。 “赢得胜利是依靠团队的力量,因为我们永不言败,坚持不懈。”在赛后接受采访时,几乎每个队员都说出了类似的话。它像是一…

    2023-06-05 • 用户投稿
  • 二型呼吸衰竭,二型呼吸衰竭的血气诊断标准是

    动脉氧分压只有38mmhg,血氧饱和度只有74%,重度通气功能障碍,凝血功能比常值高了12倍……58岁的张先生(化名)为慢性呼吸功能不全患者,没想到又查出局部晚期肠癌伴肠梗阻,唯有手术可以救命。 但谁敢给他这样的人进行手术呢?麻醉,手术,通气,每一步都险象环生,稍有不慎,手术就不是“救命”而是“致命”了。 张先生和全家多处求医希望手术切除未果。日前,江苏省肿…

    2023-07-11
  • googleagent,谷歌商店paypal官网入口

    googleagent,谷歌商店paypal官网入口googleagent,谷歌商店paypal官网入口googleagent,谷歌商店paypal官网入口googleagent,谷歌商店paypal官网入口

    1、paypal简介 PayPal是倍受全球亿万用户追捧的国际贸易支付工具,即时支付,即时到账,全中文操作界面,能通过中国的本地银行轻松提现,解决外贸收款难题,助您成功开展海外业务,决胜全球。   2、paypal优势 (1)最大的好处是,注册完全免费! (2)集国际流行的信用卡,借记卡,电子支票等支付方式于一身。帮助买卖双方解决各种交易过程中的支…

    2023-06-25 • 用户投稿
  • 联想台式电脑多少钱,联想台式电脑多少钱一套

    《联想台式电脑价格探究》 一、联想台式电脑的市场定位联想作为全球知名的电脑品牌,其台式电脑在市场上有着广泛的受众。从家庭用户到办公场所,从轻度使用到专业设计,联想台式电脑似乎都能找到自己的一席之地。我觉得联想可能是想通过不同的产品线和配置,满足各种不同需求的用户群体。就好像超市里的货架,摆满了各种不同价格、不同功能的商品,让消费者可以根据自己的预算和需求进行…

    2025-08-24
  • 裁判无视日本队犯规 ,央视nba解说杨健现状

    众所周知,自从2018年雅加达亚运会开始以来,亚运赛场上就不断的出现一些争议,从中国选手汤玲玲拿空手道冠军被裁判改判无效,再到中国选手王宇被韩国选手禹相赫干扰,这一系列的争议都是遭到了国人的批评,大家都认为这样的争议不应该出现在亚运赛上。 原本以为,随着亚运会的赛程即将接近尾声,这段时间亚组委的各项工作应该逐步完善,可是令人感到非常意外的是,就在刚刚从前方传…

    2023-06-07
  • stn币团队介绍,stn币价格今日行情

    stn币团队介绍,stn币价格今日行情stn币团队介绍,stn币价格今日行情stn币团队介绍,stn币价格今日行情stn币团队介绍,stn币价格今日行情

    10 日之间,BSV 最高涨幅达 280%,最高价格 251 美元,挤掉了 USDT,市值一路升至全球数字货币第八。昨日凌晨,数字货币市场全线回调,截至发稿,BSV 报价 180 美元。 一时间,沉寂良久的 BSV 强势回归。 BSV 的上一次高光时刻,是在去年 11 月的 BCH 硬分叉。彼时,CSW(别名“澳本聪”)带着开发团队和大矿池对 BCH 的掌权…

    2023-06-29 • 用户投稿