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)
fszxxxksfszxxxks
上一篇 2016-08-09 21:20
下一篇 2016-08-10 10:15

相关推荐

  • rsync+inotify实现数据实时同步备份

    定时备份和实时备份        说到备份,无疑于定时备份和实时同步备份。定时备份可以通过脚本或者Crontab来实现,而实时同步备份可以通过某些接口监控文件的各种变化情况来实现的(比如内核接口inotify);通过对比可以发现对数据信息要求高的环境使用实时同步备份可以更好更有利的保护数据的安全性。 软件介绍之rsyn…

    Linux干货 2015-02-28
  • corosync + pacemaker + iscsi实现高可用mysql (上)

    一、实验图   二、准备实验环境:  1)确保sql服务器之间可以基于主机名通信 [root@SQL1 ~]# vim /etc/hosts 172.16.2.13  SQL1.linux.com  SQL1 172.16.2.14  SQL2.li…

    Linux干货 2015-07-09
  • linux系统安装流程

    CnetOS6及CnetOS7 系统具体安装流程

    Linux干货 2018-03-27
  • yum –rpm前端工具详解

     1、yum 介绍        YUM: Yellowdog Update Modifier, rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包,up2date的替代工具        &nbsp…

    Linux干货 2016-08-24
  • linux网络管理 一

    什么是网络?         是指将具有独立功能的计算机和周边设备,通过通信线路连接起来,在网络软件的支持下,实现资源的共享和数据的整个系统。 网络的特征:         速度      …

    2017-03-16
  • 鸟哥?马哥?靠边站!今天猫哥带你玩千万PV级别运维架构实战

    1.哼,从今天开始马哥linux,就是我猫哥的天下了!,马哥你奏凯! 我猫哥在此宣誓,从今以后马哥教育正式更名猫哥教育! 哼,信猫哥,得永生! 2.妹的,都好好给我学习,猫哥我盯着呢 3.猫哥我第一次出镜,给咱来个特写啊小伙,拍的好看了,猫哥就免费给你讲讲Linux运维之道。 4.哎哟,拍的还不赖,猫哥我算是45°角仰望星空了,来来,猫哥给你讲讲互联网运维架…

    Linux干货 2016-04-01

评论列表(1条)

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

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