Linux运维学习历程-第七天-Linux文本工具及正则表达式

文本处理工具:

Linux文本处理三剑客:

  grep、egrep、fgrep:文本过滤工具(模式:pattern)工具

     grep:基本正则表达式 -E -F

     egrep:扩展正则表达式 -G -F

     fgrep:不支持正则表达式 -E -G 仅仅进行字符匹配,没有模式只有文本,推荐使用速度快

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

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

  正则表达式:Regual Expression,REGEXP

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

    分两类:

       基本正则表达式:BRE

       扩展正则表达式:ERE

       元字符:不能够被切割,表示控制和通配的功能

grep:Global search REgular expression and Print out the line.

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

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

  正则表达式引擎

  

grep:

  grep [OPTIONS] PATTERN [FILE…]

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

      OPTIONS:

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

        -i:ignore-case:忽略字符的大小写

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

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

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

        -q,–quiet,–silent:静默模式,既不输出任何信息(匹配到就匹配返回值0,没匹配到就不匹配返回值1)

        -A#:after,后#行

        -B#:before,前#行

        -C#:context,前后各#行

  基本正则表达式元字符:

      字符匹配:

        .:匹配任意单个字符

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

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

        以上[]当中的范围有以下几种表示方法:

        [:digit:]:表示所有数字

        [:lower:]:表示所有小写字母  

        [:upper:]:表示所有大写字母

        [:alpha:]:表示所有大小写字母

        [:alnum:]:表示所有字母和数字

        [:punct:]:表示所有的标点符号

        [:space:]:表示所有的空白字符

        [:graph:]:匹配打印字符。[[:graph:]] 等效于 [[:alnum:][:punct:]]。

        [:cntrl:]:匹配顺序值小于32或字符值为127的ASCII字符(控制字符)。控制字符包括换行符、换页符、退格符,等等。

        [:xdigit:]:匹配字符类[0-9A-Fa-f]中的字符

        [:print:]:匹配打印字符和空格。[[:print:]]等效于[[:graph:][:space:]]

        匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;

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

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

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

        \+:匹配其前面的字符至少1次

       \{m\}:匹配其前面的字符m次

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

       \{0,n\}:匹配前面的字符至多n次 

       \{m,\}:匹配前面的字符至少m次

       

       位置锚定:

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

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

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

              ^$:空行;不包括空白字符的行

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

          单词:非特殊字符组成的连续字符(字符串)都称为单词

          \<或\b:词首锚定,用于单词模式的左侧

          \>或\b:词尾锚定,用于单词模式的右侧

          \<PATTERN\>:匹配完整单词;

      练习:

          1、显示/etc/passwd文件中不以/bin/bash结尾的行;

          group -v "/bin/bash$" /etc/passwd

          2、找出/etc/passwd文件中两位或三位数;

          group "\<[0-9]\{2,3\}\>" /etc/passwd

          3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行

          group "^[[:space:]]\+[^[space]]" /etc/grub2.cfg

          4、找出"netstat-tan"命令的结果中以'LISTEN'后面跟0、1或多个空白字符结尾的行

          netstat -tan |grep "LISTEN[[:space:]]*$"

       

       分组及引用:

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

          Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:

              \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

              \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

              \3:模式从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

              …

        后向引用:引用前面的分组括号中的模式所匹配到的字符,而非模式本身

        egrep:支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E

               egrep [OPTIONS] PATTERN [FILE…]

               egrep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]        

               选项:

                  OPTIONS:

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

                  -i:ignore-case:忽略字符的大小写

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

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

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

                  -q,–quiet,–silent:静默模式,既不输出任何信息(匹配到就匹配返回值0,没匹配到就不匹配返回值1)

                  -A#:after,后#行

                  -B#:before,前#行

                  -C#:context,前后各#行

      扩展正则表达式元字符:

      字符匹配:

        .:匹配任意单个字符

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

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

        以上[]当中的范围有以下几种表示方法:

        [:digit:]:表示所有数字

        [:lower:]:表示所有小写字母  

        [:upper:]:表示所有大写字母

        [:alpha:]:表示所有大小写字母

        [:alnum:]:表示所有字母和数字

        [:punct:]:表示所有的标点符号

        [:space:]:表示所有的空白字符

        [:graph:]:匹配打印字符。[[:graph:]] 等效于 [[:alnum:][:punct:]]。

        [:cntrl:]:匹配顺序值小于32或字符值为127的ASCII字符(控制字符)。控制字符包括换行符、换页符、退格符,等等。

        [:xdigit:]:匹配字符类[0-9A-Fa-f]中的字符

        [:print:]:匹配打印字符和空格。[[:print:]]等效于[[:graph:][:space:]]

        匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;

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

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

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

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

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

       {0,n}:匹配前面的字符至多n次 

       {m,}:匹配前面的字符至少m次

       

          分组及引用:

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

          Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:

              \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

              \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

              \3:模式从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

              …

        后向引用:引用前面的分组括号中的模式所匹配到的字符,而非模式本身

        或

          a|b:a或者b;

             C|cat:C或cat

             (C|c)at:Cat或cat

    练习:

       1、找出/proc/meminfo文件中,所有以大写或小写s开头的行;至少有三种实现方式;

          grep -i "^s" /proc/memsinfo

          grep "^[Ss]"  /proc/memsinfo

          egrep "^(S|s)" /proc/memsinfo

      

       2、显示当前系统上root、centos或user1用户的相关信息;

          egrep "^(root|centos|user1)\>" /etc/passwd

      

       3、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行

       egrep -o "[_[:alnum:]]+\(\)" /etc/rc.d/init.d/functions

       

       4、使用echo命令输出一个绝对路径,使用egrep取出基名;

       echo "/tmp/dir"|egrep -o "[^/]+/?$"

       echo "/tmp/dir"|grep -o "[^/]\+\/\?$"

       进一步:取出其路径;类似于对其执行dirname命令的结果

       5、找出ifconfig命令结果中的1-255之间的数值;

         ifconfig|egrep -o "\<[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>"

       

       6、添加用户bash,testbash,basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行

       egrep "^(bash|testbash|basher|nologin):.*\1$" /etc/passwd

       egrep "^(bash|testbash|basher|nologin)\b.*\1$" /etc/passwd

       egrep "^([^:]+\>).*\1$" /etc/passwd

       fgrep:不支持正则表达式元字符

             当无需要用到元字符去编写模式时,使用fgrep必能更好;

文本查看及处理工具:wc、cut、sort、uniq、diff、patch

    wc:word count显示每个文件的换行符、 字和字节计数

       wc [OPTION]… [FILE]…

       wc [OPTION]… –files0-from=F

   显示数据含义:

       行数 单词数  字节数

            -l:仅lines行数

            -w:仅works单词数

            -c:仅bytes字节数

    

    cut:从文件的每一行中删除节

       cut OPTION… [FILE]…

                       -dCHAR:以指定的字符为分隔符,默认为空白字符例如-d:、-d|

                       -fFIELDS:挑选出的字符

                           #:显示第#行

                           #-#:显示#到#行

                           #,#:显示#和#行

    

    sort:按行排序

        sort [OPTION]… [FILE]…

        sort [OPTION]… –files0-from=F

               -n:基于数值大小而非字符进行排序

               -t CHAR:指定分隔符

               -k#:用于排序比较的字段

               -r:逆序排序

               -f:忽略字符大小写

               -u:重复的行只保留一份(重复:连续且相同)

   

    uniq:报告或忽略重复的行

          uniq [OPTION]… [INPUT [OUTPUT]]

                 -c:统计每行重复的次数

                 -u:仅显示未重复的行

                 -d:仅显示重复过的行

    diff:逐行比较文件(生成补丁)

         diff [OPTION]… FILES

                -u:使用unfied机制,即显示要修改的行的上下文,默认为3行

          diff /PATH/TO/OLDFILE /PATH/TONEWFILE >/PATH/TO/PATCH_FILE

          例如 :diff file file.new > file.patch

   

    patch:补丁更改应用的文件(向文件打补丁)

          patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile][-o outfile][-p num][-r rejectfile][file]

          patch [OPTIAONS] -i  /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE

          patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE

          安装patch:yum install patch

           -i:打补丁

          patch -i file.patch file

           -R:还原补丁

          patch -R -i file.patch file

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

(0)
NameLessNameLess
上一篇 2016-08-10
下一篇 2016-08-10

相关推荐

  • 复习-RAID原理详解

    一、RAID RAID:冗余磁盘阵列,将多个磁盘不同的方式组成阵列,作为单一磁盘使用;通过RAID,大幅提高了I/O能力、容错性。 二、RAID级别 不同的磁盘阵列组成模式,称为磁盘级别,不同的RAID级别可提供不同的I/O能力提升、磁盘可用率和容错性 1、RAID 0 条带卷 strip  用两块和两块以上磁盘组成,RAID控制器将数据平均切割成…

    Linux干货 2016-07-04
  • python基础_1

    变量/常量 常量:一旦赋值,就不能对它从新复制。python不存在常量 字面常量:一个单独出现的量,未赋值给任何变量或者常量 变量:就是一个名字,在固执符号的左边,这个名字可以指复制符号右边的内容。 变量列子: i = 3 print(i)  注:python 是强类型语言,是动态类型语言。(强类型指类型之间不能相互计算/动态类型是指变量是可以赋值…

    Linux干货 2017-10-10
  • Linux主要发行版

    Redhat:三大发行版之一,由红帽公司维护,分支有fedora,centosDebian:社区维护,非商业维护,三大发行版之一,分支有Ubuntu,Mintslackware:三大发行版之一,分支有Suse,opensusearch Linux:轻量级行业新贵

    Linux干货 2018-03-03
  • grep与正则表达式

    grep与正则表达式 grep与正则表达式 grep 正则表达式 grep 使用语法:grep [-abcEFGhHilLnqrsvVwxy][-C<显示列数>][-e<范本样式>][-f<范本文件>][范本样式][文件或目录…]  功能说明:查找指定文件或标准输入里符合条件的字符串 常用选项 -a…

    Linux干货 2016-11-05
  • 网络26期 第五周作业

    1. 显示当前系统上root、fedora或user1用户的默认shell egrep -o “^(root|fedora|user1)\>.*[^:]+$” /etc/passwd | cut -d: -f1,7 2. 找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(…

    2017-03-13
  • Linux之函数

      Linux之函数     函数介绍函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程。它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分。函数和shell程序比较相似,区别在于:Shell程序在子Shell中运行而Shell函数在…

    Linux干货 2016-08-25