linux命令系列 grep
grep, egrep, fgrep - print lines matching a pattern
SYNOPSIS
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,grep全称是Global Regular Expression Print
1. 常用选项:
-E, --extended-regexp: Interpret PATTERN as an extended regular expression. # 开启扩展(Extend)的正则表达式
-i, --ignore-case: Ignore case distinctions in both the PATTERN and the input files. # 忽略大小写
-v, --invert-match: Invert the sense of matching, to select non-matching lines. # 反过来,只打印没有匹配的,而匹配的反而不打印
-n, --line-number: Prefix each line of output with the 1-based line number within its input file. # 显示行号
-w, --word-regexp # 被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word
constituent character. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the
underscore.
-c, --count: Suppress normal output; instead print a count of matching lines for each input file. # 显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o, --only-matching: Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line. # 只显示被模式匹配到的字符串。
-A NUM, --after-context=NUM: Print NUM lines of trailing context after matching lines. # 显示匹配到的字符串所在的行及其后NUM行
-B NUM, --before-context=NUM: Print NUM lines of leading context before matching lines. # 显示匹配到的字符串所在的行及其前NUM行
-C NUM, -NUM, --context=NUM: Print NUM lines of output context. # 显示匹配到的字符串所在的行及其前后各NUM行
2. 模式部分:
(a)基本正则表达式:
匹配字符
. : 任意一个字符
[abc] : 表示匹配[abc]中任意一个字符
[a-zA-Z] : 匹配a-z或A-Z之间任意一个字符
[^123] : 匹配123之外的任意一个字符
对于常用的字符集,系统定义如下:
[a-zA-Z] <=> [[:alpha:]]
[0-9] <=> [[:digit:]]
[a-zA-Z0-9] <=> [[:alnum:]]
tab,space <=> [[:space:]]
[A-Z] <=> [[:upper:]]
[a-Z] <=> [[:lower:]]
标点符号 <=> [[:punct:]]
匹配次数:
\{m,n\} : 匹配其前出现的字符至少m次,至多n次
\? : 匹配其前出现的内容0次或1次,等价于\{0,1\}
* : 匹配其前出现的内容任意次,等价于\{0,\} ,所以".*"表示任意字符任意次
位置锚定:
^ : 锚定行首
$ : 锚定行尾。 常用技巧 "^$"匹配空白行
\b或者\<: 锚定单词的词首。 如"\blike" 不会匹配alike,但是会匹配liker
\b或者\> : 锚定单词的词尾。 如\blike\b 不会匹配alike或者liker,只会匹配like
\B : 与\b作用相反
分组及引用:
\(string\) : 将string作为一个整体方便后面引用
\n : 引用第n个左括号及其对应的右括号所匹配的内容
3. 扩展的(Extend)正则表达式:
匹配字符: 这部分和基本正则表达式一致
匹配次数:
* : 和基本正则表达式一致
? : 相比基本正则表达式没有\
{m,n} : 相比基本正则没有\
+ : 匹配其前面的字符至少一次,相当于{1,}
位置锚定: 这部分和基本正则表达式一致
分组及引用:
(string) : 相比基本正则表达式没有\
\n : 和正则表达式一样
或者:
a|b : 匹配a或者b, 注意a是指 | 的左边的整体,b也同理,比如C|cat,表示的是C或者cat,而不是Cat或者cat,如果要表示Cat或者cat,则应该写为(C|c)at。(String)除了用于引用还用于分组
注1:默认情况下,正则表达式的匹配工作在贪婪模式下,也就是说它会尽可能长地去匹配,比如某一行有字符串 abacb,如果搜索内容为 "a.*b" 那么会直接匹配 abacb这个串,而不会只匹配ab或acb。
注2:所有的正则字符,如 [ 、* 、( 等,若要搜索 * ,而不是想把 * 解释为重复先前字符任意次,可以使用 \* 来转义。
linux命令系列 grep的更多相关文章
- (5)ps详解 (每周一个linux命令系列)
(5)ps详解 (每周一个linux命令系列) linux命令 ps详解 引言:今天的命令是用来看进程状态的ps命令 ps 我们先看man ps ps - report a snapshot of t ...
- Linux命令系列之ls——原来最简单的ls这么复杂
Linux命令系列之ls--原来最简单的ls这么复杂 ls命令应该是我们最常用的命令之一了,但是我们可能容易忽略那些看起来最简单的东西. 简介 ls命令的使用格式如下 ls [选项] [具体的文件] ...
- (4)top详解 (每周一个linux命令系列)
(4)top详解 (每周一个linux命令系列) linux命令 top详解 引言:今天的命令是用来看cpu信息的top top 我们先看man top top - display Linux pro ...
- (3)lscpu详解 (每周一个linux命令系列)
(3)lscpu详解 (每周一个linux命令系列) linux命令 lscpu详解 引言:今天的命令是用来看cpu信息的lscpu lscpu 我们先看man lscpu display infor ...
- (2)free详解 (每周一个linux命令系列)
(2)free详解 (每周一个linux命令系列) linux命令 free详解 引言:今天的命令是用来看内存的free free 换一个套路,我们先看man free中对free的描述: Displ ...
- Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识
Linux命令系列之top--里面藏着很多鲜为人知的宝藏知识 简介 top命令是我们经常用来查看系统信息的一个指令,它提供了一个动态的而且是实时的借口帮助我们去查看系统执行时的进程.线程和系统参数的信 ...
- 【linux命令】grep
1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局 ...
- linux命令之grep用法介绍
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- 每天一个linux命令(51)--grep命令
linux系统中grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep 全称是 global regular expression print,表示全局正则 ...
随机推荐
- 看完了红米5 Plus发布会,我觉得魅蓝Note6降价降多了
没有意外,红米5 Plus在今天下午已经发布.这款以全面屏为卖点的手机机,将红米最低端的一个系列加价到了999元起步——这一切只是因为一个全面屏而已. 知道了红米5 Plus的售价之后,李楠大呼“降多 ...
- Windows与Linux之间的文件自动同步
问题:在工作中遇到一个场景,需要每天定时将Linux机器上的文件自动同步到Windows机器上. 解决方案有两个: 1.在Windows 机器上设置共享目录,然后在Linux机器上挂载共享 目录,每天 ...
- Ubuntu下查看自己的GPU型号
1.在命令行中输入:lspci 即可看到当前显卡型号. 2.Ubuntu 14.04 安装 Nvidia 私有驱动 sudo apt-get install nvidia-331 3.进行双显卡切换n ...
- 总结js基础方法
//判断对象上是否有个这个属性 hasProreturn obj != null && hasOwnProperty.call(obj, key); //判断是不是布尔值 isBool ...
- K2使用Nginx做负载均衡
K2使用Nginx做负载均衡 K2目前是支持Load Balancing这种方式,来做负载均衡,也可以使用F5来做负载均衡,但这次我使用nginx来实现K2的负载均衡 下载nginx 请下载nginx ...
- BUAA OO 2019 第一单元作业总结
目录 总 架构 Controller Model 输入处理 代码静态分析 行数 方法复杂度 UML 类图 优点 缺点 坑 输入 非法的空白字符 输入的简并处理 运算 浅拷贝 可变类型与不可变类型 ...
- Hadoop源码学习笔记之NameNode启动场景流程一:源码环境搭建和项目模块及NameNode结构简单介绍
最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程.想到了这个废弃已久的blog账号,决定重新开始更新. 主要分以下几步来进行源码学习: 一.搭建源码阅读环境二. ...
- 时间戳转为C#格式时间
经常发现很多地方使用一个时间戳表示时间.比如: 1370838759 表示 2013年6月10日 12:32:39. 我们就需要一个工具,方便地转换这种时间格式 什么是时间戳? 时间戳, 又叫Unix ...
- c++MFC工程修改在共享DLL中使用MFC为使用标准Windows库的解决办法
由于创建MFC工程时,默认是在共享DLL中使用MFC,如果将此选项改成使用标准Windows库,会报如下错误 c:\program files\microsoft visual studio 9.0\ ...
- 一维码Code 128简介及其解码实现(zxing-cpp)
一维码Code 128:1981年推出,是一种长度可变.连续性的字母数字条码.与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用弹性也较大. Cod ...