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

相关推荐

  • Linux文本处理三剑客之GNU awk的使用

    awk: Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 有多种版本:New awk(nawk),GNU awk(gawk) gawk –模式扫描和处理语言 基本用法:     awk[options] ‘program’ var=value file…   &nb…

    Linux干货 2016-10-06
  • 马哥教育网络第21期-第六周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@6 ~]# cp /etc/rc.d/rc.sysinit /tmp [root@6 ~]# …

    Linux干货 2016-08-15
  • 马哥教育网络班20期第3周课程练习

    答: 1、 [root@totooco ~]# who | cut -c1-9 | sort -u 2、 [totooco@totooco ~]$ who | cut -c1-9 | head -1 3、 [root@totooco ~]# cat /etc/passwd | cut -d: -f7 | grep -v /sbin/nologin | sor…

    Linux干货 2016-06-23
  • Vim编辑器解析

    vim编辑器 概述:   VIM即ViIMproved:vi的增强版 ,vim是模式化的编辑。   vi:Visual lnterface,是一种文本编辑器,所谓文本编辑数据是基于字符编码的文件,常见的编码 有ASCII编码,UNICODE编码。 种类:   行编辑器:所谓行编辑器是指一行行来编辑处理的工具   全屏编…

    Linux干货 2016-08-10
  • Linux下计划任务神器-Crontab

    作为系统运维人员都清楚,在Linux下定义重复性的任务,我们一般会采用crontab来进行:crontab这个指令所设置的工作将会循环的一直进行下去!可循环的时间为分钟、小时、每日、每月、每周。 crontab计划任务: 1)常见用法:crontab命令的作用和用法如下:描述:为每个用户维护周期性的计划任务文件用法:crontab [-u 用户][-l|-r…

    Linux干货 2016-07-22
  • CentOS7常用网络管理命令总结

    一、CentOS7网络接口命名策略(systemd)二、CentOS7的基础网络管理命令2.1 NetworkManager服务2.2 nmtui文本交互式工具2.3 nmcli命令行接口工具nmcli的语法说明NetworkManager整体状态显示显示所有连接或仅活动的连接显示所有设备的状态显示指定设备的所有连接属性添加动态的以太网连接(DHCP)添加静…

    Linux干货 2016-06-09

评论列表(1条)

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

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