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

相关推荐

  • N22-第四周

    1、复制/etc/skel目录到/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 ~]# cp -r /etc/skel /home/tuser1~]# ll -d /home/tuser1drwxr-xr-x. 3 root root 74 Aug 31 10:13 /home/tuser1~]# ch…

    Linux干货 2016-09-07
  • 搭建个人博客&论坛(LAMP):wordpress、discuz、phpMyAdmin

    搭建个人博客&论坛(LAMP):wordpress、discuz、phpMyAdmin 一、快速部署LAMP架构平台 1.CentOS 6系统部署 所需安装包:httpd, php, mysql-server, php-mysql ]# yum install -y  httpd php&n…

    Linux干货 2016-10-17
  • 打造自己小小的RPM包

    关于源码RPM包的安装于制作 什么是RPM与SRPM? 1     RPM: 1     SRPM: 2     SRPM的安装 2 一 .利用rpmbuild默认安装SRPM档案 2 二.配置路径与需要的软件功能模块 3  &n…

    Linux干货 2016-08-24
  • 互联网安全之sudo使用指南

    一、前言 sudo是什么? sudo是系统管理指令;由于root用户权限过大,在实际生产过程中很少使用root用户直接登录系统,而是使用普通用户登录系统;但是如果普通用户要对系统进行日常维护操作时需要su到root用户,为了提高安全性,可以使用sudo授权某一用户在某一主机以某一用户身份运行某些命令;从而减少root用户密码知晓人,提高系统安全性。 &nbs…

    2015-06-23
  • zabbix之报警功能的实现

    一、注册微信公众号 首先申请微信公众平台https://mp.weixin.qq.com/一个人最多申请5个公众号,所以还是可以的 申请完之后就可以根据腾讯的提示使用微信公众号了,然后用你自己的微信扫描关注微信号。 就可以看到用户数了,接下来的就要使用的用户的微信ID号了。点击用户查看用户的微信ID号。在浏览器查看用户的微信ID号。就是那个红色的ID了。 h…

    Linux干货 2017-03-27
  • 高级文件系统管理

    高级文件系统管理 配置配额系统 在内核中执行 以文件系统为单位启用 对不同组或者用户的策略不同 根据快或者节点限制,软限制 soft 硬限制hart 初始化 分区挂载选项 usrquota,grgquota 初始化数据库:quotacheck 执行配置 开启或者取消 quotaon ,quotaoff 直接编辑配额 edquota username 在she…

    Linux干货 2017-05-03

评论列表(1条)

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

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