博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux基础--grep以及模式正则表达式
阅读量:5973 次
发布时间:2019-06-19

本文共 2040 字,大约阅读时间需要 6 分钟。

grep [options] PATTERN [FILE....]

    -i:不区分大小写

    --color:高亮显示匹配字符

    -v:显示没有被匹配到的行

    -o:只显示被匹配到的字符串

    -E:使用扩展正则表达式

    *:任意长度的任意字符

    ?:匹配任意单个字符

    []:匹配指定范围内的任意字符

    [^]:匹配指定范围外的字符

    -A n:显示匹配到行下面n行

    -B n:显示匹配到行上面n行

    -C n:显示匹配到行前后n行

正则表达式:REGEXP

    Basic REGEXP:基本正则表达式

    Extended REGEXP:扩展正则表达式

基本正则表达式

grep默认使用基本正则表达式,使用-E参数表示使用扩展名正则表达式

 元字符

    .:匹配任意单个字符

    []:匹配指定范围内的任意单个字符

    [^]:匹配指定范围外的任意单个字符

    同时也支持通配符:

            [a-z],[A-Z],[0-9],[a-zA-Z],[0-9a-zA-Z]

            [[:space:]]:空白字符

            [[:punct:]]:标点符号

            [[:lower:]]:小写字母

            [[:upper:]]:大写字母

            [[:alpha:]]:大小写字母

            [[:digit:]]:数字

            [[:alnum:]]:数字和大小写字母

 次数匹配

    *:匹配其前面字符任意次

         a,b,ab,aab,acb,acdb

         a*b则只可以匹配b,ab,aab

    .*:任意长度的任意字符

    ?:匹配其前面的字符一次或0次,一般需要使用\?转义

         a,b,ab,aab,acb,acdb

         a\?b则只可以匹配b,ab,aab,acb,acdb

            注:grep是在行中查找,因此只要按照模式匹配到部分字符就可以匹配

    \{m,n\}:匹配其前面字符,至少m次,至多n次。

           \{1,\}:至少一次

           \{0,5\}:至少0次至多5次

1
2
[root@liang-study basic]
# grep '[[:space:]]\{1,3\}[0-9]\{1,\}$' a.txt 
 
1

 位置锚定:

    ^:锚定行首,此字符后面的任意内容必须出现在行首

    $:锚定行尾,此字符后面的任意内容必须出现在行尾

    ^$:空白行

    \<或者\b:其后面的字符必须作为词组的首部出现,注意书写位置

    \>或者\b:其前面的字符必须作为词组的尾部出现,注意书写位置

            例子:\<root\>:表示查找包含root作为单独词组的行

 分组:

   \(\)

     \(ab\)*:表示匹配ab任意次,即要么有ab,要么没有ab,所以全部都会匹配。如abab,ababc,a,b。

1
2
3
4
5
[root@liang-study basic]
# grep '\(ab\)\{1,3\}' a.txt  
23ab
ab
aab
aaab

    上例,就表示匹配包含ab的1-3次

        \(ab\).*\1:引用第一个左括号以及与之对应的右括号中间的所有内容

        \2

        \3

1
2
3
[root@liang-study basic]
# grep '\(ab\).*\1' a.txt         
23ab cdh ab
aab  root ab

        上例中表示匹配到ab后由任意字符后再次匹配ab的行

1
2
[root@liang-study basic]
# grep '\(ab\).*\(cd\).*\2' a.txt 
23ab cdh ab 
cd

        匹配第二个左括号以及与之对应的右括号中间的所有内容

扩展正则表达式

字符匹配:

    .:匹配任意单个字符(类基本)

    []:匹配指定范围内的任意单个字符(类基本)

    [^]:匹配指定范围外的任意单个字符(类基本)

 次数匹配:

    *:匹配其前面字符任意次(类基本)

    ?:匹配其前面的字符一次或0次,一般不需要使用\转义

    +:匹配其前面字符至少一次

    (m,n):匹配其前面字符,至少m次,至多n次。一般不需要使用\转义

位置锚定:(和基本正则表达式相同)

分组:

    (ab):

    (ab){1}:引用第一个左括号以及与之对应的右括号中间的所有内容

    (ab){2}:引用第2个左括号以及与之对应的右括号中间的所有内容

    |和or:表示或者

        注:可以看出此匹配是完整匹配A|a左边和右边。

        注:经过分组匹配,即可匹配Ab或者ab了

例子:获取ifconfig 0-255之间的整数

1
2
3
4
5
6
ifconfig 
|
grep 
-E --color 
'\<([1-9]|[1-9][0-9]|1[1-9][0-9]|2[0-4][0-9]|25[0-4])\>'
    
[1-9]:匹配符合条件的个位数
    
[1-9][0-9]:匹配符合条件的两位数
    
1[1-9][0-9]:匹配符合条件的1xx的三位数
    
2[0-4][0-9]:匹配符合条件的2xx的三位数
    
25[0-4]:匹配符合条件的25x的三位数

本文转自  亮公子  51CTO博客,原文链接:http://blog.51cto.com/iyull/1884328

转载地址:http://wpdox.baihongyu.com/

你可能感兴趣的文章
精品软件 推荐 相当优秀的轻量级文本编辑器 Notepad2
查看>>
Lync 2013快速入门手册之三:组织Lync会议
查看>>
SQL SERVER 2008 表与约束的创建维护
查看>>
我的友情链接
查看>>
Exadata VM CELL 上添加新磁盘--扩充空间
查看>>
zabbix企业应用之监控mysql 5.6版本
查看>>
我的友情链接
查看>>
BGP选路原则与专有命令的研究
查看>>
关于java的引用、C++的指针、引用的深入分析
查看>>
CMD 修改Host文件 BAT
查看>>
linux用户管理的命令及手动添加用户
查看>>
Windows 7 家庭版如何启用Administrator账户
查看>>
我的友情链接
查看>>
mfs权威指南
查看>>
只是你没那么重要罢了
查看>>
javabean的初步认识学习
查看>>
GTK 安装步骤
查看>>
js 生成随机13位国际条码 支持获取校验位
查看>>
java根据开始时间和结束时间,计算中间天数,并打印
查看>>
Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)
查看>>