Linux之sed的使用

sed的工作原理

        sed是一种流编辑器以行为单位来处理文本的一款功能十分强大的编辑器,一次只处理一行内容,当处理文本是,将要处理的行放置在模式空间里(缓冲区),接下来sed命令处理模式空间里的内容,处理完成后,把模式空间里处理后的内容送至屏幕打印输出,接下来处理下一行,依次循环,知道文件尾部,默认sed是不编辑源文件的,仅对模式空间中的处理做处理,除非使用了-i选项来编辑源文件。

sed的用途

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

 

语法格式:

         sed [OPTION]… {script-only-if-no-other-script} [input-file]..

选项

        -n:不输出模式空间内容的自动打印,静默模式

         -e:多点编辑也可以使用脚本 script –e  script

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

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

         -i:编辑源文件

 

地址定界:

1、  不给地址:对全文进行处理

2、  单地址

#:指定的行,数字表示,如果想显示到屏幕上使用-n

sed  ‘1p’   /etc/fstab

1.jpg

/pattern/:被此处模式所能匹配到的每一行

sed ‘/^UUID/p’  /etc/fstab

 2.jpg

3、  地址范围

#,#1,3表示的是文本的第一行到第三行

sed ‘1,3p’ /etc/fstab

 3.jpg

#,+#1,+3从第一行往后面的3行进行处理

sed ‘1,+3/^UUID/p’   /etc/fstab

 4.jpg

/pat1/,/pat2/:第一次被pattern匹配的行开始至第一次被pattern2匹配的行的结束,这中间的所有行

sed  ‘/^root/,/^p/p’  /etc/fstab

 5.jpg

#/pat1/1/pat1/第一行开始到被pattern1匹配的行的结束这中间的所有行

sed  ‘1,/^mail/p’  /etc/fstab

 6.jpg

         4~步进

         1~2:基数行,文件的1,3,5,7……

           2~2:偶数行,文件的2,4,6,8

         7.jpg

        8.jpg

编辑命令        

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

         sed  ‘1d’  /etc/fstab

        9.jpg

         p:显示模式空间中的内容,前面已经举例这里就不在重复

        

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

         sed  ‘1,3a \this is mine’  /etc/fstab

         10.jpg

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

         sed  ‘2i \hello world’   /etc/fstab

         11.jpg

         c  \text :替换行为单行或多行文本,将当前的行的内容替换你输入的内容

         sed ‘/^root/c \rooter’  /etc/passwd

        12.jpg

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

         sed ‘/root/w  /tmp/root.txt’  /etc/passwd

        13.jpg

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

         sed  ‘2r  /etc/issue’  /etc/fstab

        14.jpg

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

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

        16.jpg

         s///:查找替换,支持使用其他分隔符,@@@###,当遇到/时可以使用这两种符号,避免转意

         sed  ‘s/oot/OOT/’  /etc/passwd

         sed  ‘s@/@#/’    /etc/fstab

        17.jpg

    18.jpg

         替换标记

         g:行内全局替换,一行中如果匹配到多个内容,所以匹配到的内容都会进行替换

   sed 's/oot/OOT/g'  /etc/passwd

         p:显示替换成功的行

   sed 's/oot/OOT/p' /etc/passwd

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

   sed 's/ot/OOT/w /tmp/root.txt'  /etc/passwd

sed高级编辑命令:

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

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

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

         G:从保持空间取出数据追加至模式空间

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

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

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

         d:删除模式空间中的行

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

1.jpg

 

 

练习

   

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

 sed 's/^[[:space:]]//' /etc/grub2.cfg

20.jpg

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

sed -r  's/^#[[:space:]]\+//'  /etc/fstab

21.jpg


Ø  /root/install.log每一行行首增加#

sed 's/^/#&/g'  /root/install.log

22.jpg


Ø  /etc/fstab文件中不以#开头的行的行首增加#

sed 's/[^#]/#&/g'  /etc/fstab

23.jpg



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

24.jpg


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

ifconfig  |sed -n '2p'|sed 's/Bcast.*$//'|sed 's@.*:@@'

19.jpg


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

 ls  /media/Packages/* .rpm |sed   's/.rpm$//g'|sed 's/.*\.//'|sort  -n  |uniq -c

26.jpg

 

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

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

相关推荐

  • MBR、GPT的结构和区别

    本章学习内容         ——–介绍MBR、GPT         ——–不同的启动流程         ——–分区结构 &nb…

    Linux干货 2016-08-29
  • Haproxy+Keepalived+Varnish+LAMP+Memcacked+NFS 实现WordPress站点的动静分离

    详细说明,请点击CSDN博客的连接地址:http://blog.csdn.net/yhy1271927580/article/details/70195158

    2017-04-16
  • 开篇

    正式开始学习的第一天,了解LINUX,爱上LINUX。希望在往后的日子里越战越勇!!

    Linux干货 2017-07-11
  • Linux 入门(二)

    又一个周的时间过去了,觉得时间过的好快的呢,大概是因为沉迷于学习吧(害羞脸),在这一周里学习了不少东西呢,下面就来总结一下吧 (1)    cp 复制 如果只是单纯的敲cp复制文件而不加任何选项的时候,如果目的目录文件已经存在,就会直接覆盖,而不会出现任何提示信息,而当在实际操作时,就算不加 –i选项,也会提示要不要覆盖文件 原…

    2017-07-22
  • LAMP

    练习:编译安装amp,提供两个基于主机名的虚拟主机      (1) https, 部署pma      (2) 部署wordpress 编译安装: mariadb: # wget 10.1.0.1:/pub/Sources/7.x86_64/mariadb/…

    Linux干货 2016-10-12
  • ansible进阶(roles应用)

    ansible 进阶 一、roles简介 一个项目从开始到结束,不是简单几十个playbook就可以完事了,当文件数很多,有上百个的话,仅通过简单的includes不停的引用,那最终的结果错综复杂。这个时候ansible roles就可以很好的发挥它的作用了。 roles,字面意思是角色的含义,可以理解为有相互关联功能的集合。我们把安装ntp、mem、ngi…

    2017-01-05

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-10 15:32

    文章整体结构清晰,有理论有时间,图文并貌,特殊用法h跟H方向错了哦。