grep(General Regular Expression Parser)命令

news2024/11/28 2:39:51

基本用法 

本篇介绍非常有用的命令是grep,这个不寻常的名字代表的是通用正则表达式解析器(General Regular Expression Parser,简写为grep)。你使用find命令在系统中搜索文件,而使用grep命令在文件中搜索字符串。事实上,一种非常常见的用法是在使用find命令时,将grep作为传递给-exec的一条命令。

grep命令使用一个选项、一个要匹配的模式和要搜索的文件,它的语法如下所示:

grep [options] PATTERN [FILES]

 如果没有提供文件名,则grep命令将搜索标准输入。我们首先来查看grep命令的一些主要选项,它们列在了下表中,完整的选项列表请见grep命令的手册页。

 

 实验 基本的grep命令用法

我们来看一些使用grep命令的简单例子:

lkmao@ubuntu:/big/work/ipc/caption_01$ grep bill bill.c
void bill(char* arg){
    printf("bill:we passed %s\n",arg);
lkmao@ubuntu:/big/work/ipc/caption_01$ grep -c bill bill.c main.c
bill.c:2
main.c:1
lkmao@ubuntu:/big/work/ipc/caption_01$ grep -c -v bill bill.c main.c
bill.c:3
main.c:6
lkmao@ubuntu:/big/work/ipc/caption_01$ grep -n bill bill.c main.c
bill.c:3:void bill(char* arg){
bill.c:4:    printf("bill:we passed %s\n",arg);
main.c:5:    bill("hello world");
lkmao@ubuntu:/big/work/ipc/caption_01$

实验解析

第一个例子未使用选项,它只是在文件bill.c中搜索字符串bill,然后输出匹配的行。文件名未输出是因为你只在一个文件中进行搜索。

第二个例子在两个不同的文件中计算匹配行的数目。在这种情况下,文件名被输出。

第三个例子使用-v选项对搜索取反,在两个文件中计算不匹配行的数目。

第四个例子使用-n选项,输出匹配的文件名+行号+该行的内容。

正则表达式

正如你所看到的,grep命令的基本用法非常容易掌握。现在是时候介绍正则表达式的基础知识了,它允许你实现更复杂的匹配。正如我们在本章前面提到的那样,正则表达式被广泛应用于Linux和许多其他开源编程语言中。你可以在vi编辑器或Perl脚本中使用它们,而且不论它们出现在哪里,其基本原理都是一样的。

在正则表达式的使用过程中,一些字符是以特定方式处理的。最常使用的特殊字符如下表所示。

 如果想将上述字符用作普通字符,就需要在它们前面加上\字符。例如,如果想使用$字符,你需要将它写为\$。在方括号中还可以使用一些有用的特殊匹配模式,如表2-18所示。

 另外,如果指定了用于扩展匹配的-E选项,那些用于控制匹配完成的其他字符可能会遵循正则表达式的规则,见下表。对于grep命令来说,我们还需要在这些字符之前加上\字符。

 这看上去有点复杂,但如果你实际应用它,将会发现它并不像第一眼看上去那么复杂。掌握正则表达式的最简单方法就是尝试一些实验。

(1)我们的第一个例子是查找以字母t结尾的行。你可能会猜到需要使用特殊字符$,如下所示:

创建一个文件words.txt,并输出下面的内容 

hello world
this is a test
gulu is a dog

注意,输入完毕后,要保证行尾没有空格

$ grep t$ words.txt 
this is a test

如你所见,这个命令找到了以字母t结尾的行。

(2)现在假设想要查找以字母u结尾的单词。要完成这一任务,你需要使用方括号括起的特殊匹配字符。在本例中,你将使用的是[[:blank:]],它用来测试空格或制表符:

$ grep u[[:blank:]] words.txt
gulu is a dog

(3)下面我们来查找以th开头的由4个字母组成的单词。在本例中,你既需要使用[[:space:]]来划定单词的结尾,还需要用字符(.)来匹配一个额外的字符:

$ grep th..[[:space:]] words.txt
this is a test

(4)最后,我们用扩展grep模式来搜索只有2个字符长的全部由小写字母组成的单词。我们通过指定一个匹配字母a到z的字符范围和一个重复2次的匹配来完成这一任务:

$ grep -E [[:space:]][a-z]\{2\}[[:space:]] words.txt
this is a test
gulu is a dog

我们在这里只涉及了正则表达式中最重要的内容。与Linux中大多数事物一样,系统中的大量文档可以帮助你了解更多的细节,但学习正则表达式最好的方法是实际操作。

小结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

磁盘坏道:sd 2:0:0:0: [sda] Sense Key : Medium Error [current] [descriptor]

现网问题 从log来看磁盘可能存在问题,进一步实锤。 问题定位 通过badblocks扫描磁盘,发现sda磁盘有磁道损坏,建议更换磁盘。 badblocks命令详解 Linux badblocks命令用于检查磁盘装置中损坏的区块,执行指令时须指定所要检查的磁盘装置&…

postman高级使用

概念:让程序代替人判断测试用例执行的结果是否符合预期的一个过程 特点: postman断言使用js编写,断言写在postman的tests中 tests脚本在发送请求之后执行,会把断言的结果最终在testresult中进行展示 常用的postman提供的断言片…

在Django项目中的各个应用中分别编写路由配置文件urls.py

目录 01-通过命令建立三个应用02-配置路由 /index/、/app1/index/、/app2/index/02-1-配置路由 /index/ 并将各个应用的urls.py文件包含进主路由目录中02-02-配置路由/app1/index/02-03-配置路由/app2/index/ 03-编写各个应用的视图views.py 文件04-注册模板文件所在目录05 创建…

CVPR23 | 可编辑3D场景布局的文本引导多对象合成NeRF

来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://arxiv.org/abs/2303.13843 0.背景: 最近,文本到图像生成通过将视觉-语言预训练模型与扩散模型相结合,取得了巨大的成功。这些突破也使得强大…

python: read excel and export excel

""" PythonAppReadExcel.py edit: geovindu,Geovin Du,涂聚文 date 2023-06-13 保险 """ # This is a sample Python script. # python.exe -m pip install --upgrade pip # Press ShiftF10 to execute it or replace it with your c…

orbslam 地图点观测距离范围 mfMinDistance,mfMaxDistance 的理解

目的是在不同帧不同距离的范围内观测到同一个地图点 直观理解,由于相机成像小孔成像近大远小 相机在距离特征点i 1米时图像金字塔第0层的 31x31图像区域, 类似于相机在距离 特征点i 最远约米时的图像金字塔第7层的31x31图像区域。 相机在距离特征点i 1…

桥接模式(十)

不管怎么样,都要继续充满着希望 上一章简单介绍了适配器模式(九), 如果没有看过, 请观看上一章 一. 桥接模式 引用 菜鸟教程里面的 桥接模式介绍: https://www.runoob.com/design-pattern/bridge-pattern.html 桥接(Bridge)是用于把抽象化…

GitHub 2800颗星,支持GPT/Transformer,字节跳动这个开源项目是怎么来的?

AI 绘画、机器翻译、多轮对话……对于各类 AI 相关的功能来说,总有一个痛点,困扰着所有训模型的算法工程师们: 想要效果更好,那么 AI 模型一般都很大,耗费的算力更多不说,运行起来还更费时间; 如…

关键字static,final的使用

关键字:static 概念 是java中的一个关键字 用于修饰成员(成员变量和成员方法) 类属性、类方法的设计思想 概念: 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实 质上的对象&#x…

使用递归SQL实现树形参数的转换(后传前)

1、什么是递归SQL 递归 SQL(Recursive SQL)是一种 SQL 查询语言的扩展,它允许在查询中使用递归算法。递归 SQL 通常用于处理树形结构或层次结构数据,例如组织结构、产品分类、地理位置等。 递归 SQL 语句通常包含两个部分&#xf…

大数据入门-大数据技术概述(一)

大数据入门系列文章 大数据入门-大数据是什么 一、概念 大数据技术是指在构架大数据平台的时候需要的技术。包含存储系统,数据库,数据仓库,资源调度,查询引擎,实时框架等。下面以我目前所了解到的一些技术做简要介绍…

React学习笔记十-生命周期(旧)

此文章是本人在学习React的时候,写下的学习笔记,在此纪录和分享。此为第十篇,主要介绍React非常重要的组件的生命周期(旧)。要学习react新的生命周期,那必须先学习旧的生命周期。 目录 1.引出生命周期概念 1.1案例 1.1.1案例卸…

snmp默认团体名/弱口令漏洞及安全加固

一、漏洞描述 SNMP(简单网络管理协议)被广泛用于计算机操作系统设备、网络设备等领域监测连接到网络上的设备是否有任何引起管理上关注的情况。在运行SNMP服务的设备上,若管理员配置不当运行默认团体名/弱口令访问,将导致敏感信息泄露。敏感…

Sentinel源码分析-ProceesorSlotChain调用链及树状资源节点

Sentinel 实现流控,隔离,降级等功能,本质要做两件事: 数据统计: 统计某个资源的访问数据(QPS,RT(响应时间),异常比例)等信息规则判断: 判断流控规…

攻略 | 如何拿下奖金534万的全国人工智能大赛?

全国人工智能大赛已连续成功举办三届,累计吸引全球20个国家、1万多支队伍参与竞技,已成为人工智能领域参与规模和影响力都名列前茅的顶级赛事。作为头部科技企业、高等院校和科研院所的链接平台,大赛在促进产学研融合、推动多项成果落地方面成…

比后缀Ti更香的N卡全能型号回归,40显卡终于不恶心了

NVIDIA RTX 40 系显卡上市有一段时间了,不过大家给出的一致看法是:除了 4090 外,其他型号暂时都不值得购买! 倒不是说他们性能多拉胯,主要是核心规格与价格属实不那么匹配。 特别是主流的 RTX 4060、4070 级别&#…

flask搭建在线音乐网系统

1.使用虚拟环境Virtualenv来创建项目 2. Flask框架介绍 Flask框架是一个用Python编写的轻量级Web应用程序框架,依赖于Werkzeug和Jinja2两个外部库。Werkzeug是一个WSGI工具包,用于接收和处理HTTP请求,匹配视图函数,支持Cookie和会…

基于Java社区文化宣传网站设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

2023年5月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2023年5月国产数据库大事件和重要产品发布消息。 目录 5月国产数据库大事记 TOP105月国产数据库大事记(时间线)产品/版本发布兼容认证代表厂商大事记排行榜新增数据库厂商活动 5月国产数据库大事记 TOP10 5月国产数据库大事记&…

高考之后想学习网络安全,网络安全/信息安全是一个好的专业吗?

本人信息安全专业毕业,在甲方互联网大厂安全部与安全乙方大厂都工作过,有一些经验可以供对安全行业感兴趣的人参考。 或许是因为韩商言让更多人知道了CTF,也或许是因为网络安全越来越受国家重视,安全最近愈加火爆了。当然&#x…