Grep学习笔记
1. grep简介
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包 括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能 更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
- ^
锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
.匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
*匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[]匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\)标记匹配字符,如'\(love\)',love被标记为1。
\<锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\>锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\}重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\}重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\}重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b单词锁定符,如: '\bgrep\b'只匹配grep。
- +
匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。
?匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。
a|b|c匹配a或b或c。如:grep|sed匹配grep或sed
()分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。
x{m},x{m,},x{m,n}作用同x\{m\},x\{m,\},x\{m,n\}
为 了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。
- [:alnum:]
文字数字字符
[:alpha:]文字字符
[:digit:]数字字符
[:graph:]非空字符(非空格、控制字符)
[:lower:]小写字符
[:cntrl:]控制字符
[:print:]非空字符(包括空格)
[:punct:]标点符号
[:space:]所有空白字符(新行,空格,制表符)
[:upper:]大写字符
[:xdigit:]十六进制数字(0-9,a-f,A-F)
- -?
同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。
-b,--byte-offset打印匹配行前面打印该行所在的块号码。
-c,--count只打印匹配的行数,不显示匹配的内容。
-f File,--file=File从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
-h,--no-filename当搜索多个文件时,不显示匹配文件名前缀。
-i,--ignore-case忽略大小写差别。
-q,--quiet取消显示,只返回退出状态。0则表示找到了匹配的行。
-l,--files-with-matches打印匹配模板的文件清单。
-L,--files-without-match打印不匹配模板的文件清单。
-n,--line-number在匹配的行前面打印行号。
-s,--silent不显示关于不存在或者无法读取文件的错误信息。
-v,--revert-match反检索,只显示不匹配的行。
-w,--word-regexp如果被\<和\>引用,就把表达式做为一个单词搜索。
-V,--version显示软件版本信息。
要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。
- $ ls -l | grep '^a'
通过管道过滤ls -l输出的内容,只显示以a开头的行。
$ grep 'test' d*显示所有以d开头的文件中包含test的行。
$ grep 'test' aa bb cc显示在aa,bb,cc文件中匹配test的行。
$ grep '[a-z]\{5\}' aa显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep 'w\(es\)t.*\1' aa如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。
转载于:https://blog.51cto.com/halforg/1365791
相关文章:

安永创新中心落子北京,聚焦5G技术赋能企业数字化转型
4月21日,安永北京wavespace旗舰创新中心开幕仪式暨企业数字化转型高峰论坛在北京卓著中心举行,该创新中心致力于赋能企业的创新转型、业务增长以及推进前沿技术的商业应用,聚焦组建生态联盟,纳入最新产业理念,通过互联…

JavaScript模块化 --- Commonjs、AMD、CMD、es6 modules
随着前端js代码复杂度的提高,JavaScript模块化这个概念便被提出来,前端社区也不断地实现前端模块化,直到es6对其进行了规范,下面就介绍JavaScript模块化。 这篇文章还是希望能给大家一个比较好的思路,即JavaScript模块…

关于强命名程序集
如何创建强命名程序集(Strong Name Assembly)创建一个强命名程序集首先需要获得一个用强命名实用工具(Strong Name Utility,即SN.exe,.NET SDK自带)产生的密钥。下面简要介绍一下SN.exe的一些用法。要产生一…

get the better of sb
2019独角兽企业重金招聘Python工程师标准>>> get the better of sb 克服,占上风,打败 › to defeat someone in a competition:He fought fiercely, but his opponent easily got the better of him.› If a feeling gets the better of you…

安谋中国推出“山海” S12,AIoT 安全解决方案技术全解读
近日,安谋中国推出了自主研发的AIoT全栈安全解决方案“山海”S12,可应用于智能手机、平板、智能电视及安防等行业,为安全解决方案如数字版权保护、AI 安全、身份认证等提供基础安全能力。 据了解,此前安谋中国自研处理器IP已经推出…

js canvas游戏初级demo-上下左右移动
大概流程就是监听状态变化擦除画布重绘 由于js监听时间变化的函数addEventListener只能达到每秒触发20次左右,也就是每秒20帧,看起来有点卡卡的 所以用定时器搞到每秒30帧 按上下左右键可以移动砖块 <!DOCTYPE html> <html lang"en"&…

判断一个IP区间(或IP)是否被另一个IP区间所包含
以下方法实现判断一个IP是否被一个IP区间所包含 有一些静态方法可能引用了同名空间的自定义的类, 至于合并两个相临的IP段,可对其中的最大或最小IP1 using System;using System.Text.RegularExpressions; namespace HKH.Common{ /// <summary>…

制作OpenStack上使用的CentOS系统镜像
很多进行Openstack测试的人都发现,自己的openstack测试环境搭建的很成功,安全策略也添加了,但是上传镜像之后,却出现无法Ping通,无法ssh到实例等问题,实际上这很可能是由于我们没有使用一个正确的镜像导致的…

从最强AI算力到“元脑”2.0,智算加速产业变革
作者 | Just出品 | AI科技大本营(ID:rgznai100)AI模型的数据量、结构的复杂程度不断增加,带来了大规模AI算力的庞大需求。2020年7月,OpenAI实验室推出拥有1750亿参数的NLP模型GPT-3,其训练数据集规模超过500GB…

动态规划和分治法,贪心算法以及递归的再一次深刻理解和体会
每次体会算法都有新的感觉,刷题越多,对算法的理解感觉也就越深刻。下面我们来重新体会下分治法,动态规划,贪心法,递归的理解。1.分治法:将问题分成单独的阶段,每个阶段互相不干扰很独立…

基于注解的设计模式
2019独角兽企业重金招聘Python工程师标准>>> http://alexradzin.blogspot.com/2013/01/annotation-based-design-patterns.html 转载于:https://my.oschina.net/heatonn1/blog/204789

提气!清华成立集成电路学院,专研“卡脖子”技术
整理 | 寇雪芹头图 | 下载于ICphoto出品 | AI科技大本营(ID:rgznai100)今天上午,清华大学举行了集成电路学院揭牌仪式,党委书记陈旭宣读了学院成立决定并致辞表示,集成电路学院为学校实体教学科研机构&…

第一本的java 的小总结
1.Java常见的注释有哪些,语法是怎样的? 1)单行注释用//表示,编译器看到//会忽略该行//后的所文本 2)多行注释/* */表示,编译器看到/*时会搜索接下来的*/,忽略掉/* */之间的文本。 3)文档注释用/** */表示࿰…

WMI Series :事件预订和处理
WMI事件概述对于从事Winows编程的开发人员来说,事件驱动的应用程序设计是再熟悉不过了,但是WMI中的事件又是一个什么样的概念呢?对于宝贵的内存和CPU资源,管理员需要不断的监视其性能;对于磁盘而言,我们需要…

如何记录2秒内实现1800度转体+翻腾,百度智能云黑科技教你看懂跳水
百度智能云与中国国家跳水队协同推进人工智能与体育跨界合作再进一步,正在为我国AI体育的应用探索开拓一片新的大陆。4月22日,百度与中国国家跳水队举行合作启动仪式,百度智能云正式成为中国国家跳水队独家AI合作伙伴,助力中国跳水…

python 多线程日志切割+日志分析
楼主最近刚刚接触python,还是个小菜鸟,没有学习python之前可以说楼主的shell已经算是可以了,但用shell很多东西实现起来还是不可能的事情,例如最明显的一点大日志分析,由于楼主的公司,每天的日志量很大&…

redis入门(03)redis的配置
一、配置文件 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf。你可以通过 CONFIG 命令查看或设置配置项。 二、查看修改 1、查看配置 1.1、vi redis.conf 1.2、redis 127.0.0.1:6379> config get CONFIG_SETTING_NAME 2、修改配置 2.1、vi redis.c…

WMI Series :管理对象的信息查询和方法访问
管理对象的信息查询和方法访问在这一节内容,我们将通过几个实例来学习如何查询管理对象信息和访问管理对象提供的方法,这一部分内容将使用到我们在前面讲述到的System.Management命名空间中的相关类对象。管理对象的信息查询管理对象的信息查询有两种方式…

穿山甲发布聚合产品GroMore,为开发者变现赋能
近日,穿山甲发布聚合产品「GroMore」,该产品整合多个主流广告平台资源,支持App开发者将广告请求同时发送至多个平台,并根据各平台的出价能力,合理分配流量,最终达到广告收益最大化的目的。聚合产品在海外市…

使用SQLServer配置管理器配置SQLServer数据库引擎实例,以便侦听特定的固定1433端口。...
最近在安装SQLServer2012 SP1的时候,初始安装的情况下开启的是动态端口,为了使远程服务器连接到SQlServer我们需要开启固定的1433端口。 默认的端口状态。 开启的方法 配置相关的SQL实例的网络配置 重启SQLServer服务 查看一下端口状态 转载于:https://b…

P1194 买礼物
P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元。 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么…

.NET 框架中的 WMI 命名空间
.NET 框架中的WMI 命名空间.NET框架中与WMI规范有关的命名空间有两个,分别是System.Management和System.Management.Instrumentation两个命名空间。其中System.Managemen命名空间提供的类对象为访问各种管理对象提供了面向对象的编程接口,而System.Management.Instr…

一个已经存在 10 年,却被严重低估的库!
来源 | 写代码的明哥头图 | 下载于视觉中国今天介绍的是一个已经存在十三年,但是依旧不红的库 decorator,好像很少有人知道他的存在一样。这个库可以帮你做什么呢 ?其实很简单,就是可以帮你更方便地写 python 装饰器代码ÿ…

linux_shell 第一章 变量
2019独角兽企业重金招聘Python工程师标准>>> #!/bin/sh //解释器 a"1"; //对a进行赋值,等号两边不能有空格,以冒号("")方式传入,变量不需要先定义即可使用 b"2;" string"…

让vim不要自动添加新的注释行
vim里面有一个特性,如果你在一行注释后新加一行,vim会自动在下一行的开始位置添加注释符号。例如对于C/C来说 //This is a comment line// 第二行的"//"符号就是vim自动添加的。如果是在大量编写注释,…

WMI使用技巧集
WMI使用技巧集 很多的朋友对WMI可能见过但理解不深,我也是十分想了解关于WMI的知识,可一直找不对太合适的资料,在网上的一些资料不是有很多错误,就是讲解不清,我有空的时候将关于WMI的知识集中一下,放在这…

如果不被吐槽,那我还是程序员吗
一组漫画看看中美两国程序员的差别网友:不能更形象了... 本文原创公众号:不会笑青年 60专家,13个技术领域,CSDN 《IT 人才成长路线图》重磅来袭!直接扫码或微信搜索「CSDN」公众号,后台回复关键词「路线图」…

Symantec BE 12.5 备份Exchange错误排除
备份时,提示以下错误:最终错误: 0xe0008703 - 作业失败于自身测试运行。解决方法:先备份本地的很小的文件(不是测试备份),成功后,再测试Exchange的备份。以下是官网的详细解答。http://www.syma…

oc75--不可变字典NSDictionary
// // main.m // NSDictionary // //#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {// 1.如何创建NSDictionary *dict1 [NSDictionary dictionaryWithObject:"lnj" forKey:"name"];NSString *name1 [dict1 object…

特殊SQL语句及优化原则
1.按姓氏笔画排序:Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 2.数据库加密:select encrypt(原始密码)select pwdencrypt(原始密码)select pwdcompare(原始密码,加密后密码) 1--相同;否则不相同 encrypt(原始密码)select pw…