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. PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法

    一.数字补0. 如果要自动生成学号,自动生成某某编号,就像这样的形式“d0000009”.“d0000027”时,那么就会面临一个问题,怎么把左边用0补齐成这样8位数的编码呢?我想到了两种方法实现这个 ...

  2. python-->(set /dict)交集 差集 并集 补集(功能用来做交差并补的)

    # ### 集合 作用:交集 差集 并集 补集(功能用来做交差并补的) '''特征:自动去重 无序''' #定义一个空集合 setvar = set() #set()强制转换成一个空集合的数据类型 p ...

  3. echarts 实现tooltip双栏效果

    实现效果如下: 代码: //option tooltip: { trigger: 'axis', axisPointer: { label: { show: true, fontSize: 15 } ...

  4. centos7下git服务器端搭建

    git的安装: yum 源仓库里的 Git 版本更新不及时,最新版本的 Git 是 1.8.3.1,但是官方最新版本已经到了 2.9.2.想要安装最新版本的的 Git,只能下载源码进行安装. 1. 查 ...

  5. zabbix 配合钉钉群机器人(webhook) 报警

    首先建钉钉群,添加一个自定义机器人拿到webhook zabbix添加一个报警媒介 搞一个shell脚本来启动Python脚本(直接用zabbix调Python脚本不行,不知道什么原因) vim di ...

  6. Extjs event domain 研究

    Listeners and Event Domains In Ext JS 4.2, the MVC event dispatcher was generalized with the introdu ...

  7. node代码打包为 exe文件---端口进程关闭demo

    最近用到 java,用tomcat起的服务,经常服务关了,对应的进程还在跑,导致再次启动服务失败,需要手动关闭进程. 使用 dos命令虽然只有两行,总是输,也很烦. netstat -ano | fi ...

  8. phpstudy安装redis

    php安装扩展,首先要在php官网下载相应的库文件, http://pecl.php.net/package/redis 下载相应版本的文件,首先phpinfo()看看当前的php环境版本等等   我 ...

  9. jquery事件重复绑定

    本文实例分析了jQuery防止重复绑定事件的解决方法.分享给大家供大家参考,具体如下: 一.问题: 今天发现jQuery一个对象的事件可以重复绑定多次,当事件触发的时候会引起代码多遍执行. 下面是一个 ...

  10. gitlab RPM卸载 & 安装 && 升级(9.0.13-》9.5.9-》10.0->10.3.9->10.6.6-》10.8-》11.0)

    版本:9.0.3 升级版本:9.0.13 一,停止服务 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq gitlab-ctl stop nginx 二, ...