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

相关推荐

  • 浅述vim操作

    vim是一种比vi更加强大的模式化的全屏文本编辑器。vim在工作过程中有三种模式:编辑模式、插入模式、末行模式。 编辑模式(默认):又称命令模式,其工作内容包括移动光标、剪切、粘贴、删除等 输入模式:亦可称为插入模式,主要是在文件中修改文本内容 末行模式:亦称扩展命令模式,主要是执行vim内置命令的 vim三种模式之间的切换:如下图   (1)编辑…

    Linux干货 2016-08-11
  • Linux文件权限管理-2016-8-04

    Linux文件权限管理 学习大纲 一 关于文件和目录的权限基本概述(rwx); 二 针对文件或目录权限管理的命令: a) 相关命令:chown , chgrp ,chmod chown修改文件属主 和 属组 语法:chown  [OPTION]…  [OWNER][:[GROUP]]  FILE&#8230…

    Linux干货 2016-08-04
  • 手动编译内核+busybox+dropbear+nginx

    我们需要先在宿主机上添加一个磁盘,然后,把这个磁盘做好分区和文件系统: fdisk /dev/sdb 创建第一个分区: n p 1 +512M 创建第二个分区: n p 2 +10G 保存退出: w 为分区提供文件系统: kpartx /dev/sdb 为分区提供文件系统: mke2fs -t ext4 /dev/sd…

    Linux干货 2015-09-24
  • 文件的权限详解(二)ACL篇

    文件的权限详解(二)ACL篇 ACL访问控制列表作用: 1、 ACL:Access Control List,实现灵活的权限管理2、 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限3、 CentOS7.0默认创建的xfs和ext4文件系统有ACL功能。4、 CentOS7.X之前版本,默认手工创建的ext4文件系统无ACL功能。需手动增加: tu…

    Linux干货 2016-08-05
  • sed和awk的用例及pam安全措施-第十五周

    总结sed和awk的详细用法; sed用法 sed(Stream EDitor)是一款流编辑器,用来对文本进行过滤与替换操作。其原理是:通过文件或管道读取文件内容,但是sed默认并不直接修改源文件,而是一次仅读取文件的一行至模式空间(pattern space)根据sed指令进行编辑并输出结果后清除模式空间,即所有的操作都是在模式空间中进行的。 语法格式 s…

    2017-06-05
  • 配置LAMP实现WordPress

    配置LAMP实现WordPress 在同一台主机上实现LAMP(Linux + Apache + MariaDB + PHP) CentOS 7.3、Apache 2.4.6、MariaDB 5.5.52、PHP 5.4.16 1 安装LAMP 采用yum方式进行安装httpd、MariaDB、php、php-mysql,php-mysql用来进行php和M…

    2017-06-06

评论列表(1条)

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

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