linux基础--grep以及模式正则表达式

简介:

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参数表示使用扩展名正则表达式

 元字符

    .:匹配任意单个字符

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

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

    同时也支持通配符:http://iyull.blog.51cto.com/4664834/1882815

            [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:表示或者

wKioL1hY6hGDFSexAAAfdvnG_Ew826.jpg-wh_50

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

wKioL1hY6rSy_huDAAAZAPDrNJU228.jpg-wh_50

        注:经过分组匹配,即可匹配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的三位数

wKiom1hY8e7DRKKcAACJIKDEuCo022.jpg-wh_50


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

相关文章
|
2月前
|
监控 Linux
linux之grep详解
linux之grep详解
|
2月前
|
存储 Linux Shell
linux查找技巧: find grep xargs
linux查找技巧: find grep xargs
35 13
|
2月前
|
机器学习/深度学习 存储 Linux
linux中强大且常用命令:find、xargs、grep
linux中强大且常用命令:find、xargs、grep
83 9
|
2月前
|
SQL 移动开发 Linux
linux下find、grep命令详解
linux下find、grep命令详解
159 8
|
3月前
|
负载均衡 网络协议 Linux
在Linux中, LVS三种模式的工作过程是什么?
在Linux中, LVS三种模式的工作过程是什么?
|
3月前
|
存储 Linux 文件存储
在Linux中,raid0、raid1、raid5 三种工作模式的工作原理及特点?
在Linux中,raid0、raid1、raid5 三种工作模式的工作原理及特点?
|
3月前
|
Unix Linux C语言
在Linux中,grep和egrep命令的区别?
在Linux中,grep和egrep命令的区别?
|
3月前
|
SQL 数据处理 数据库
SQL正则表达式应用:文本数据处理的强大工具——深入探讨数据验证、模式搜索、字符替换等核心功能及性能优化和兼容性问题
【8月更文挑战第31天】SQL正则表达式是数据库管理和应用开发中处理文本数据的强大工具,支持数据验证、模式搜索和字符替换等功能。本文通过问答形式介绍了其基本概念、使用方法及注意事项,帮助读者掌握这一重要技能,提升文本数据处理效率。尽管功能强大,但在不同数据库系统中可能存在兼容性问题,需谨慎使用以优化性能。
47 0
|
3月前
|
负载均衡 监控 网络协议
在Linux中,LVS-DR模式原理是什么?
在Linux中,LVS-DR模式原理是什么?
|
3月前
|
负载均衡 算法 Linux
在Linux中,LVS-NAT模式的原理是什么?
在Linux中,LVS-NAT模式的原理是什么?