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模式检索的更多相关文章

  1. 每日linux命令学习-sed

    Linux的文本处理实用工具主要由sed和awk命令,二者虽然略有差异,但都使用正则表达式,默认使用标准I/O,并且使用管道命令可以将前一个命令的输出作为下一个命令的输入.笔者将在本节学习sed命令. ...

  2. 每日linux命令学习-引用符号(反斜杠\,单引号'',双引号"")

    引用符号在解析器中保护特殊元字符和参数扩展,其使用方法有3种:反斜杠(\),单引号(’‘),双引号(“”). 单引号和双引号必须匹配使用,均可在解析器中保护特殊元字符和通配符,但是单引号(硬转义)主要 ...

  3. 每日linux命令学习-历史指令查询(history、fc、alias)

    linux历史机制对命令行中输入的命令进行编号并依此保存,以维护命令历史.登录会话期间输入的命令保存在shell内存中,若终止命令则添加至历史文件. 1. 箭头符号方向键 使用键盘上的箭头方向键可以从 ...

  4. 每日linux命令学习-head命令和tail命令

    本节主要学习了linux文件浏览的相关命令,包括cat.less.more.read.tail等,由于本人经常使用cat.less.more命令,已经较为熟悉,所以本节重点学习head命令和tail命 ...

  5. Linux命令学习: grep命令

    grep 查找命令 遍历当前目录下的所有文件,查找文本所在的文件 grep -r "hello"

  6. 每日linux命令学习-rpm命令

    rpm命令 rpm是一款强大的Redhat软件包管理工具,可创建.安装.查询.验证.升级和卸载每个软件包,软件包是存储文件,包括需要安装的文件和名称.版本.说明等报信息. rpm默认支持7种操作模式, ...

  7. 每日linux命令学习-xargs命令

    xargs命令 xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据 ...

  8. 每日linux命令学习-lsattr和chattr

    lsattr和chattr命令 1. lsattr命令 作用: 显示文件属性 语法: lsattr [-adlRvV][files...] 参数: -a 显示所有文件和目录(包括隐藏文件)的属性. - ...

  9. 每日linux命令学习-read命令

    read命令 作用 从标准输入中读取一行. 语法 read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p pro ...

随机推荐

  1. 【LeetCode每天一题】Search in Rotated Sorted Array(在旋转数组中搜索)

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e., ...

  2. 我的Chrome插件

    1.AdBlock 用来屏蔽广告,用过的人都说好. 2.Flash Block(Plus) 用来限制Flash的播放. 3.Flash Control 用来限制Flash的播放. 4.Full Pag ...

  3. 常用 shell 命令

    watch watch -n 1 -d "ps -ef | grep php" 功能:监控 PHP 进程的变化 原理: 重复的执行后面的命令,默认时间间隔是2秒 参数解释 -d 高 ...

  4. JQuery 获取页面某一元素在屏幕上的位置

    获取页面某一元素的绝对X,Y坐标 var X = $('#ElementID').offset().top;//元素在当前视窗距离顶部的位置 var Y = $('#ElementID').offse ...

  5. iOS UI进阶-4.0 地图与定位

    在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院   在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2大功能 ...

  6. iOS 第三方框架-SDWebImage

    iOS中著名的牛逼的网络图片处理框架.包含的功能:图片下载.图片缓存.下载进度监听.gif处理等等.用法极其简单,功能十分强大,大大提高了网络图片的处理效率.国内超过90%的iOS项目都有它的影子. ...

  7. python模拟艺龙网登录requests包

    对比urllib.urllib2与requests不难发现,前者功能更强大,但是实现一个功能要写很多的代码,后者,requests代码简洁,用起来更快速 下面一个模拟登录的代码:看看吧一共也没有几行就 ...

  8. Ecshop 表结构 字段说明

    ecs_account_log 用户帐号情况记录表,包括资金和积分等 log_id mediumint 自增ID号user_id mediumint 用户登录后保存在session中的id号,跟use ...

  9. webpack 解决跨域问题

    一.webpack 内置了 http-proxy-middleware 可以解决 请求的 URL 代理的问题 安装:npm install --save http-proxy-middleware 二 ...

  10. Bootstrap-按钮相关的class

    .btn          基础class.btn-default  白底黑字的按钮.btn-warning  红色按钮.btn-success  绿色按钮.btn-info     浅蓝色按钮.bt ...