每日linux命令学习-grep模式检索
grep模式检索指令包括grep,egrep,和fgrep,。Linux系统使用正则表达式优化文本检索,所以在此,笔者首先学习了一下正则表达式。
1. 正则表达式
正则表达式使用被称为元字符(Meta)的字符组,元字符解析超出字符本身的含义。正则表达式的元字符集如下表所示(预设正则表达式/基础正则表达式+扩展正则表达式):
| 运算符 | 作用 | 使用范例 | |
| ^word | 搜索以word开始的行 | 范例:查找行首为#开头的哪一行,并列出行号 命令:grep -n '^#' regular_express.txt |
|
| word$ | 搜索以word结尾的行 | 范例:将行尾为!的那一行打印出来,并列出行号 命令:grep -n '!$' regular_express.txt |
|
| . | 任意一个字符,有且只有一个字符 | 范例:查找的字符串可以使(eve)(eae)(eee)等,即e与e之间一定要有一个字符,不能是(ee) 命令:grep -n 'e.e' regular_express.txt |
|
| \ | 将特殊字符解析为字符原义 | 范例:查找含有单引号'的那一行 命令:grep -n \' regular_express.txt |
|
| * | 匹配0个以上字符/字符串 | 范例:查找包含有(ess)的行 命令:grep -n 'ess*' regular_express.txt |
|
| [...] | [list] | 匹配list中任意一个字符 | 范例:查找含有(gl)或(gd)的那一行 命令:grep -n 'g[ld]' regular_express.txt |
| [c1-c2] | 匹配在c1-c2范围内的任意一个字符 | 范例:查找包含有数字的行 命令:grep -n '[0-9]' regular_express.txt |
|
| [c1-c2c3-c4] | 匹配在c1-c2或c2-c3范围内的任意一个字符 | 范例:查找包含有数字或字母的行 命令:grep -n '[0-9a-z]' regular_express.txt |
|
| [^c1-c2] | 匹配在c1-c2范围以外的任意一个字符 | 范例:查找的字符串可以是(oog)(ood)但不能是(oot) 命令:grep -n 'oo[^t]' regular_express.txt |
|
| word\{n\} | 连续匹配word字节n次 | 范例:在g与g之间有2到3个的o存在的字符串所在的行 命令:grep -n 'go\{2,3\}' regular_express.txt |
|
| word\{n,\} | 连续匹配word字节至少n次 | ||
| word\{n,m\} | 连续匹配word字节至少一次,但是不能超过m次 | ||
| \<word | 包含有词首为word的字符串的行 | \<linux:包含以linux字符串开始的词的行 | |
| word\> | 包含有词尾为word的字符串的行 | \>linux:包含以linux字符串结束的词的行 | |
| + | 匹配+字符之前的多个字符 | 范例:检索inux前至少有一个小写字母的行 命令:grep -n '[a-z]+inux' regular_express.txt |
|
| ? | 之前无字符或匹配1个字符,与通配符?不同 | 范例:检索包含有lve或love的行 命令:grep -n 'lo?ve' regular_express.txt |
|
| word1|word2 | 匹配word1或word2字符 | 范例:检索包含有love或hate的行 命令:grep -n 'love|hate' regular_express.txt |
|
| () | 字符组 | 范例:检索包含有多次匹配ov的行 命令:grep -n '(ov)+' regular_express.txt |
|
正则表达式使用的正则表达式扩展方括号如下表所示:
| 字符类 | 代表意义 |
| [:alnum:] | 代表英文大小写字符及数字,即0-9,A-Z,a-z |
| [:alpha:] | 代表任何英文大小字符,即A-Z,a-z |
| [:lower:] | 代表小写字符,即a-z |
| [:upper:] | 代表大写字符,即A-Z |
| [:digit:] | 代表数字,即0-9 |
| [:xdigit:] | 代表十六进制的数字类型,因此包括0-9,A-F,a-f的数字与字符 |
| [:blank:] | 代表空格键与tab按键 |
| [:graph:] | 除了空格与tab按键之外的其它所有按键 |
| [:space:] | 任何会产生空白的字符,包括空格键,Tab键,CR等 |
| [:cntrl:] | 代表键盘上面的控制按键,既包括CR,LF,Tab,Del等 |
| [:print:] | 代表任意可打印字符 |
| [:punct:] | 代表标点符号,即" ' ? ! ; : # $ |
2. grep
grep指令用于检索与输入文件的已有模式列表匹配的行,之后通过标准输出复制和显示检索的行。在不超出内存上限的范围内,grep的检索范围对输入行没有限制,而且可以匹配1行中所有字符。
若输入文件的最后一个字节不是换行符,则执行grep,因为grep是使用换行符分隔匹配对象的,所以无法在文本中匹配换行符。
注意模式中,正则表达式与单引号('')的应用,单引号内的正则表达式可以被shell解析。
格式:
grep [选项] [模式] [文件名]
常用选项:
-b:显示时在搜索行添加块编号
-c:不显示匹配行,只显示匹配行数
-h:查询多个文件时,不显示文件名
-i:检索时忽略模式中的字母大小写
-l:查询多文件时只输出包含匹配字符的文件名,显示时每个文件名用newline隔开
-n:显示匹配行及行号
-r:在指定目录及其子目录下进行搜索
-s:不输出错误信息
-v:显示不包含匹配模式的所有行
-w:匹配整个模式表达式
模式中的正则表达式:
可以使用除+、?、|、()之外的正则表达式,即预设正则表达式。
示例:
1. 搜索有the的行,并输出行号
[fengbingyan@test:~] $ grep -n 'the' fby.txt
2. 搜索输出没有the的行,并输出行号
[fengbingyan@test:~] $ grep -nv 'the' fby.txt
3. 搜索并输出含有test或tast的行
[fengbingyan@test:~] $ grep 't[ea]st' fby.txt
4. 搜索文本中的空行,并输出行号
[fengbingyan@test:~] $ grep -n '^$' fby.txt
5. 搜索oo前面没有g的字符串所在的行
[fengbingyan@test:~] $ grep -n '[^g]oo' fby.txt
6. 搜索不以英文字母开头的行
[fengbingyan@test:~] $ grep -ni '[^a-z]' fby.txt
7. 搜索以.结尾的行
[fengbingyan@test:~] $ grep '\.$' fby.txt
3. egrep
添加了正则表达式+、?、|、(),即扩展表达式,相当于命令:grep -E,用法与grep相同。
4. fgrep
fgrep命令类似于grep,相当于命令:grep -F,但是不能使用正则表达式,均按照模式的原样信息进行检索,所以一般不太常用。
[root@localhost grep]#cat fgrep.txt
[A-Z] $95
B 99
[root@localhost grep]#fgrep '[A-Z]' fgrep.txt
[A-Z] $95
[root@localhost grep]#fgrep '$9' fgrep.txt
[A-Z] $95
每日linux命令学习-grep模式检索的更多相关文章
- 每日linux命令学习-sed
Linux的文本处理实用工具主要由sed和awk命令,二者虽然略有差异,但都使用正则表达式,默认使用标准I/O,并且使用管道命令可以将前一个命令的输出作为下一个命令的输入.笔者将在本节学习sed命令. ...
- 每日linux命令学习-引用符号(反斜杠\,单引号'',双引号"")
引用符号在解析器中保护特殊元字符和参数扩展,其使用方法有3种:反斜杠(\),单引号(’‘),双引号(“”). 单引号和双引号必须匹配使用,均可在解析器中保护特殊元字符和通配符,但是单引号(硬转义)主要 ...
- 每日linux命令学习-历史指令查询(history、fc、alias)
linux历史机制对命令行中输入的命令进行编号并依此保存,以维护命令历史.登录会话期间输入的命令保存在shell内存中,若终止命令则添加至历史文件. 1. 箭头符号方向键 使用键盘上的箭头方向键可以从 ...
- 每日linux命令学习-head命令和tail命令
本节主要学习了linux文件浏览的相关命令,包括cat.less.more.read.tail等,由于本人经常使用cat.less.more命令,已经较为熟悉,所以本节重点学习head命令和tail命 ...
- Linux命令学习: grep命令
grep 查找命令 遍历当前目录下的所有文件,查找文本所在的文件 grep -r "hello"
- 每日linux命令学习-rpm命令
rpm命令 rpm是一款强大的Redhat软件包管理工具,可创建.安装.查询.验证.升级和卸载每个软件包,软件包是存储文件,包括需要安装的文件和名称.版本.说明等报信息. rpm默认支持7种操作模式, ...
- 每日linux命令学习-xargs命令
xargs命令 xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据 ...
- 每日linux命令学习-lsattr和chattr
lsattr和chattr命令 1. lsattr命令 作用: 显示文件属性 语法: lsattr [-adlRvV][files...] 参数: -a 显示所有文件和目录(包括隐藏文件)的属性. - ...
- 每日linux命令学习-read命令
read命令 作用 从标准输入中读取一行. 语法 read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p pro ...
随机推荐
- CSS3-Hover 效果 展示
首先说说兼容性的问题吧,主要说说IE浏览器的兼容性.IE10+. 效果展示的css代码: .button { margin: .4em; padding: 1em; cursor: pointer; ...
- strncat、strcat
strncat函数 2007年03月15日 20:32:00 阅读数:13676 函数原型:extern char *strncat(char *dest,char *src,int n) 参数说明: ...
- sql server 函数的自定义
创建用户定义函数.这是一个已保存 Transact-SQL 或公共语言运行时 (CLR) 例程,该例程可返回一个值.用户定义函数不能用于执行修改数据库状态的操作.与系统函数一样,用户定义函数可从查询中 ...
- ida调试ios应用
收集,整理http://www.cnblogs.com/fply/p/8488842.html 这个文章讲了ios上debugserver相关配置 http://iphonedevwiki.net/i ...
- cocos2dx 3.x版本搭建Mac环境工程(创建一个新的C++工程)百分百可行
首先第一篇,想学cocos2dx第一步就是搭建环境,第一步搭建不了环境,创建不了工程那一切都是扯淡. 说到mac下安装cocos2d-x想到的模式就是xcode+cocos2d-x.因为我本身就是一个 ...
- node中中间件body-parser的实现方式
最近学习了Koa框架中用到了koa-bodyparser接收表单POST请求的参数,直接使用其API是很容易的,但却不知道其原生方法怎么实现的.故做些笔记 首先,是搭建了Koa的服务器不再赘述 其次, ...
- 笔记 : CSS3实现背景渐变过渡
使用CSS3的人都知道背景background-image是可以线性渐变(linear-gradient)和径向渐变(radial-gradient),但是想要做到过渡动画,单纯的background ...
- es6函数的扩展
扩展运算符 含义 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. 扩展运算符的应用 (1)合并数组 // ES5 [1, 2].co ...
- C#中生成的随机数为什么不随机?
from:https://www.xcode.me/more/net-csharp-generate-random 随机数生成方法可以说是任何编程语言必备的功能,它的重要性不言而言,在C#中我们通常使 ...
- 《Semantic Sentence Matching with Densely-connected Recurrent and Co-attentive Information》DRCN 句子匹配
模型结构 首先是模型图: 传统的注意力机制无法保存多层原始的特征,根据DenseNet的启发,作者将循环网络的隐层的输出与最后一层连接. 另外加入注意力机制,代替原来的卷积.由于最后的特征维度过大,加 ...