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)

相关推荐

  • 十四岁人人网上发言经验分享

    相信官方的解释,毕竟由省部级官方背书的调查,说一些案件之外的想法。 网络媒体的双刃剑 若伊始没有通过网络的发酵、扩散,那本次事件恐不会引起如此大轰动。作为个人,极其渺小,想让自己的诉求得到重视,高曝光不尝是个捷径,越被重视,也就越真实。 网络的便捷,让网络的力量衍生到更基层,在乡村,也能参与到网络的信息世界中,它的点赞、转发、评论,就是舆论力量的汇聚,并且这…

    2023-05-23
  • 吴卓林承认出柜 ,成龙的女儿吴卓林现在的近况

    成龙的新片《英伦对决》正在热映,票房干不过《羞羞的铁拳》,差距近7亿元,这可能是成龙电影票房最低的一次,《警察故事2013》也卖到5.34亿元,可国庆假期很快结束《英伦对决》才卖到4亿多。 真可谓屋漏偏逢连夜雨,成龙的私生女吴卓林在父亲新片上映期间,不仅闹离家出走,还和女友同居,最近又曝出出柜宣言,网友评论纷纷指责成龙做父亲很失败,一个儿子吸毒,一个女儿出柜…

    2023-06-03 用户投稿
  • 淘宝网页打不开怎么回事,淘宝网页打不开怎么回事儿

    《淘宝网页打不开怎么回事?全面解析与解决办法》 在如今的互联网时代,淘宝作为国内最大的电商平台之一,几乎是人们购物的首选。 然而,有时候我们可能会遇到淘宝网页打不开的情况,这让我们感到十分困惑和着急。 那么,淘宝网页打不开究竟是怎么回事呢?下面我们就来全面解析一下可能的原因,并提供相应的解决办法。 一、网络问题 1.自身网络故障 也许是我们自己的网络出现了问…

    2025-04-28
  • 月租5元联通卡(联通卡怎么查月租多少钱)

    一、原套餐详情 1、原资费59元23G定向流量+200分钟通话; 2、套餐外流量5元/G,通话0.15元/分钟,短彩信0.1元/条,国内接听免费 二、优惠后套餐详情 激活后需一次性首充100元享受以下优惠,不充值无法享受: 1、首充100后,可享前两年每月减免20元月租,优惠后39元/月 2、激活当月起,月底最后一天店铺每月补贴10元话费抵扣月租(连续补贴2…

    2023-05-26
  • opusmagnum安卓版,postern安卓汉化版

    Windows 最低配置: 操作系统: Windows Vista / 7 / 8 / 10 处理器: 2.0 GHz 内存: 4 GB RAM 图形: 1366 x 768 DirectX 版本: 10 存储空间: 需要 600 MB 可用空间 推荐配置: 图形: 1920 x 1080 不知道如何查看自己电脑配置的玩家可以下载右侧工具:配置检测工具 如果…

    2023-07-01
  • mac论坛,苹果mac论坛

    Mac到底要不要装Windows?一直以来这都是个很有争议性的话题。只要你经常浏览国内一些知名Mac论坛,就会发现那里不仅有各种Mac装Windows教学贴、讨论区,而且时不时还会冒出关于“Mac装不装Windows”的掐架贴,而且这种帖子的回复人气还相当火爆。支持此行为的网友能罗列出一系列Mac需要装Windows的道理,持反对意见的也能说的各种不需要的理…

    2023-06-24
  • 甲流传播途径有哪些,甲流的典型症状

    刚开学不久,很多学校因班级多名学生患上“甲流”而被迫停课。那甲流到底是个什么病呢?关于甲流的这10个小问题,带您全面了解甲流。 问题1:什么是甲流? 甲流指的是甲型流感,是由甲型流感病毒引起的急性呼吸道传染病,常发生在冬春季。 问题2:今年甲流以何种毒株为主? 今年流行的甲流毒株以甲型H1N1为主,检出比例约64.2%~86.1%,这个毒株并不是新出现的,流…

    2023-07-04
  • 余额宝 保本,余额宝保本不

    《余额宝与保本:深度解析与探讨》 在当今的金融市场中,余额宝作为一款备受关注的理财产品,其“保本”属性一直是投资者们关注的焦点。 那么,余额宝到底是否真的保本呢?这是一个值得深入探讨的问题。 一、余额宝的基本概念与运作模式 余额宝是由支付宝推出的一款货币基金产品。 它的运作模式相对简单,将用户闲置的资金集合起来,投资于货币市场基金等低风险、高流动性的金融工具…

    2025-05-21
  • 快速小程序开发,开发微信小程序教程

    微信小程序近两年占领了原生APP的大片江山,导致了原来的Android和IOS开发人员大量转型和失业。 微信小程序的小巧以及“拿来即用”的特点,已经被广大用户习惯性的接受了。现在就连百度、阿里、今日头条都在纷纷打造小程序平台。 如何快速的开发一款小程序呢?第一步就得选好开发工具和框架。小编也亲自开发过多个小程序,根据多年的开发经验,这里给大家推荐Uniapp…

    2023-07-12
  • 淘宝订单贷款的利息是,淘宝订单贷款额度

    《淘宝订单贷款的利息是》 在淘宝的运营世界中,淘宝订单贷款是一项备受关注的服务,而其中的利息问题更是商家们常常关心的焦点。 那么,淘宝订单贷款的利息到底是多少呢?这可能是一个让很多人感到困惑的问题,因为它并不是一个固定的数值,而是会受到多种因素的影响。 一、利息的计算方式 淘宝订单贷款的利息计算方式可能会因不同的贷款产品和贷款期限而有所差异。 一般来说,利息…

    2025-05-13
  • 吞噬星空境界(吞噬星空动漫改动太大)

    吞噬星空动漫现在已经出到地球篇的尾声,身为地球第一强者的洪和身为地球第二强者的雷神已经合力去对付地球上最强的怪兽金角巨兽去了。不过两人虽然全力以赴想杀死金角巨兽,但是最后却并没有成功,因为金角巨兽实在太变态了,哪怕没有了脑袋还能活,而且生命力更是强的可怕。 洪和雷神境界本就不如金角巨兽,两人也只是行星级强者而已,还没有达到恒星级,但是金角巨兽已经是恒星级强者…

    2023-06-15 用户投稿
  • 惠普星系列哪个性价比高(惠普星系列14寸的笔记本怎么样)

    前几天有个95后的粉丝问:牛叔,我每天的工作中要收发各种文档、图片和视频,笔记本512GB的存储都快满了,刚好也想升级笔记本了,预算五六千元,有大容量SSD的轻薄本可以选吗?希望颜值高点儿,毕竟要经常出去会见客户,风扇噪声也不能太吵。 这的确是不少当代年轻一代进阶职场人遇到的问题。以牛叔为例,一个典型的文字编辑工作者,工作机两个硬盘,系统盘128GB基本装满…

    2023-07-06 用户投稿