linux学习20 运维核心技能-grep命令与基本正则表达式

Posted Presley

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux学习20 运维核心技能-grep命令与基本正则表达式相关的知识,希望对你有一定的参考价值。

一、回顾

  1、bash的特性:hash,变量

    命令hash:hash命令

    变量:

      本地变量,环境变量,局部变量

      位置参数变量,特殊变量

      变量赋值:name=value,export name=value,declare -x name=value

      变量引用:$name,${name}

      变量撤销:unset name

  2、bash脚本编程,运行脚本

    #!/bin/bash

    #

  3、bash的配置文件

    profile类:登陆式shell

    bashrc类:非登录式shell

    登录式shell: /etc/profile --> /etc/profile.d/* --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

    非登录式shell:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh 

二、文本处理工具

  1、Linux上文本处理三剑客

    a、grep:文本过滤工具(模式:pattern)工具。

    b、sed:stream editor,流编辑器;文本编辑工具;

    c、awk:Linux上的实现为gawk,文本报告生成器(格式化文本);

  2、正则表达式:Regual Expression,REGEXP

    a、由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能;

    b、基本正则表达式:BRE

    c、扩展正则表达式:ERE

    d、元字符

三、文本处理工具之grep

  1、grep:Global search REgular expression and Print out the line。

    作用:文本搜索工具,根据用户指定的"模式(过滤条件)"对目标文本逐个进行匹配检查;打印匹配到的行;

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

  2、正则表达式引擎:

    grep [OPTIONS] PATTERN [FILE]

    grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

  3、常见选项

    --color=auto:对匹配到的文本着色后高亮显示

    -i: Ignorecase:忽略字符的大小写

    -o:仅显示匹配到的字符串本身

    -v:--Invert-match:显示不能被模式匹配到的行

    -E:支持使用扩展的正则表达式元字符

    -q:--quiet,silent:静默模式,即不输出任何信息

[root@node1 ~]# grep -q UUID /etc/fstab 
[root@node1 ~]# echo $?
0
[root@node1 ~]# grep -q UUIID /etc/fstab 
[root@node1 ~]# echo $?
1

    -A #:after,即显示匹配到的和后两行

[root@node1 ~]# grep -A 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

    -B #:before,即显示匹配到的和前两行

[root@node1 ~]# grep -B 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

    -C #:显示前后各两行

[root@node1 ~]# grep -C 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

  4、基本正则表达式元字符

    a、字符匹配

      .:匹配任意单个字符

[root@node1 ~]# grep "r..t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
tomcat:x:53:53:Apache Tomcat:/usr/share/tomcat:/sbin/nologin

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

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

        [:dlgit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

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

        *:匹配其前面字符任意次:0,1,多次

          例如:grep "x*y"

            abxy:可以匹配到

            aby:可以匹配到

            xxxxxy:可以匹配到

            yab:可以匹配到

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

        ?:匹配其前面的字符0次或1次,其前面字符是可有可无的

[root@node1 ~]# grep "x*y" grep.txt 
abxy
aby
xxxxxy
yab
[root@node1 ~]# grep "x?y" grep.txt 
abxy
aby
xxxxxy
yab

        +:匹配其前面的字符1此或多次;即前面的字符至少要出现1次

[root@node1 ~]# grep "x+y" grep.txt 
abxy
xxxxxy

        {m}:匹配前面字符m次

[root@node1 ~]# grep "x{1}y" grep.txt 
abxy
xxxxxy
[root@node1 ~]# grep "x{2}y" grep.txt 
xxxxxy

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

[root@node1 ~]# grep "x{2,5}y" grep.txt 
xxxxxy

          {0,n}:至多n次

          {m,}:至少m此

    c、位置锚定

       ^:行首锚定:用于模式的最左侧

      $:行尾锚定:用于模式的最右侧

      ^PATTERN$:用于PATTERN来匹配整行

        ^$:空白行;

        ^[[:space:]]*$:空行或包含空白字符的行

      单词:

    d、分组及引用

1:01:46

以上是关于linux学习20 运维核心技能-grep命令与基本正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

运维工程师需要学习哪些课程

新手做linux运维需要学哪些知识

运维工程师需要掌握啥技能

Linux运维工程师主要学点啥?

如何掌握并提高linux运维技能

运维工程师必会技能