grep命令及正则表达式

grep命令和正则表达式


grep基本概念

grep:global search regular expression and print out the line.

作用:文本过滤器,用于文本搜索,用指定“模式”逐行匹配。

模式:由正则表达式字符及文本字符所编写的过滤条件

正则表达式:由一类特殊字符和文本字符所编写的模式,其有些字符不表示字符字面意义,而表示控制或通配的功能

比较记忆:

无标题22.png

基本正则表达式:BRE
扩展正则表达式:ERE
    grep -E = egrep

grep语法

grep [OPTIONS] PATTERN [FILE…]

OPTIONS:
            --color=auto:对匹配到的文本着色后高亮显示;
            -i:ignorecase,忽略字符的大小写;
            -o:仅显示匹配到的字符串本身;
            -v, --invert-match:显示不能被模式匹配到的行;
            -E:支持使用扩展的正则表达式元字符;
            -q, --quiet, --silent:静默模式,即不输出任何信息;

            -A #:after, 后#行
            -B #:before,前#行
            -C #:context,前后各#行

基本正则表达式原字符

字符匹配:

    . :匹配任意单个字符;
    []:匹配指定范围内的任意单个字符;
    [^]:匹配指定范围外的任意单个字符;
    [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

匹配次数:

用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;

*:匹配其前面的字符任意次;0,1,多次;
        例如:grep "x\+y"
                abxy
                aby
                xxxxxy
                yab
.*:匹配任意长度的任意字符
\?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;
\+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次;
\{m\}:匹配其前面的字符m次;
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多n次
\{m,\}:至少m次

位置锚定:

^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^PATTERN$:用于PATTERN来匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行;



\< 或 \b:词首锚定,用于单词模式的左侧;
\> 或 \b:词尾锚定,用于单词模式的右侧;
\<PATTERN\>:匹配完整单词;
单词:非特殊字符组成的连续字符(字符串)都称为单词;

分组及引用

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;
            \(xy\)*ab

Note:分组括号中的模式匹配 到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\3
      ...

            He loves his lover.
            He likes his lover.
            She likes her liker.
            She loves her liker.

            ~]# grep  "\(l..e\).*\1"  lovers.txt

后向引用:引用前面的分组括号中的模式所匹配到的字符;

扩展正则表达式的元字符

字符匹配:

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

次数匹配:

*:任意次,0,1或多次;
?:0次或1次,其前的字符是可有可无的;
+:其前字符至少1次;
{m}:其前的字符m次;
{m,n}:至少m次,至多n次; 
        {0,n}
        {m,}

位置锚定

^:行首锚定;
$:行尾锚定;
\<, \b:词首锚定;
\>, \b:词尾锚定;

分组及引用:

():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;
后向引用:\1, \2, ...
    或:
a|b:a或者b;
        C|cat:C或cat
        (c|C)at:cat或Cat

练习:(grep)

1、显示/etc/passwd文件中不以/bin/bash结尾的行;
    ~]# grep -v "/bin/bash$" /etc/passwd

2、找出/etc/passwd文件中的两位数或三位数;
    ~]# grep  "\<[0-9]\{2,3\}\>"  /etc/passwd

3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行;
    ~]# grep  "^[[:space:]]\+[^[:space:]]"  /etc/grub2.cfg

4、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行;
    ~]# netstat -tan | grep  "LISTEN[[:space:]]*$"

练习:(egrep)

1、找出/proc/meminfo文件中,所有以大写或小写S开头的行;至少有三种实现方式;
    ~]# grep -i "^s" /proc/meminfo
    ~]# grep "^[sS]" /proc/meminfo
    ~]# grep -E "^(s|S)" /proc/meminfo

2、显示肖前系统上root、centos或user1用户的相关信息;
    ~]# grep -E "^(root|centos|user1)\>" /etc/passwd

3、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;
    ~]# grep  -E  -o  "[_[:alnum:]]+\(\)"  /etc/rc.d/init.d/functions

4、使用echo命令输出一绝对路径,使用egrep取出基名;
    ~]# echo /etc/sysconfig/ | grep  -E  -o  "[^/]+/?$"

    进一步:取出其路径名;类似于对其执行dirname命令的结果;
        ~]# echo /etc/sysconfig/ | egrep -o "^/.*[^/]" | egrep -o "^/.*/" | egrep -o  "^.*[^/]"
        ~]#echo /etc/sysconfig/ | egrep -o "^/.*(/[[:alnum:]])" | egrep -o "^/.*/" | egrep -o  "^.*[^/]"
5、找出ifconfig命令结果中的1-255之间的数值;
    ~]# ifconfig | grep  -E  -o  "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

6、课外作业:找出ifconfig命令结果中的IP地址;

7、添加用户bash, testbash, basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;
    ~]# grep  -E  "^([^:]+\>).*\1$"  /etc/passwd

课外练习

http://www.tuicool.com/articles/uyuIbaV

原创文章,作者:N24_yezi,如若转载,请注明出处:http://www.178linux.com/57700

(0)
N24_yeziN24_yezi
上一篇 2016-11-05 19:11
下一篇 2016-11-05 20:08

相关推荐

  • Linux的哲学思想

    Linux的哲学思想 一切皆文件 在linux中所有的一切,都是可以通过ls进行查询的到的,甚至可以说ll查看详细信息时表现形式为文件,所有的设备,所有的文件不论后缀,只是一个单纯文件通过vim可以编辑一切 单一目的的小程序,组合小程序完成复杂任务 在linux中,每一个命令都是对应一个功能,通过不同的参数来完成不同的要求,通过繁多的小的命令来完成大型的要求…

    Linux干货 2016-10-30
  • Linux三剑客awk命令

    1 .awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。 awk其名称得自…

    2017-09-08
  • linux文件基本权限、默认权限、隐藏权限和ACL权限

    基本权限    文件属性rwx     每个文件当用ls -l查看时,都会显示文件的详细属性信息,其中在排在首位的共有10位字符信息     例如 -rw-r–rw-. 1 root root …….. 共有10位,第一位代表的是文件的类型,后边9位表示的是文件的…

    Linux干货 2016-08-04
  • keepalived+nginx部署(单主模型)

    环境准备Centos7系统,后端服务器提供web服务。地址规划: VS1: 172.18.51.7 VS2:172.17.51.77 RS1:172.18.51.74 RS2:172.18.51.75 VirtualIP:172.18.51.82 拓扑图: 原理:nginx是高度模块化的应用程序,其中nginx_proxy模块即可实现负载均衡,将前端的用户请…

    2017-05-17
  • N22-第3周作业-冥界之王

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@CentOS6 ~]# who  | cut -d " " -f1 | uniq 2、取出最后登录到当前系统的用户的相关信息。…

    Linux干货 2016-09-19
  • VIM编辑器

    VIM是什么? Vim是从VI发展出来的一个文本编辑器,拥有许多丰富的功能,便于编程开发,在程序员中被广泛使用,是类Unix系统用户最喜欢的功能强大的跨平台文本文件编辑工具。 为什么要用VIM? vi编辑器是所有类UNIX系统下标准的编辑器,他是我们使用Linux系统不能缺少的工具。对于所有类UNIX系统的任何版本,vi编辑器是完全相同的。而vim是从VI发…

    2017-06-03

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-10 18:36

    赞,grep总结的还是比较细的,几个例子也比较好~继续加油~