grep灵活的关联正则表达式实现文件过滤,而sed是一个数据流的编辑器,或者说是一个行编辑器,它将文件一行一行的数据放入到内存中进行编辑,而awk是一个报告生成器,这个我们以后再说;

  之前我们介绍过grep与正则表达式,这一节我们详细介绍sed的用法

sed的基本用法

  sed  Stream EDitor 流编辑器,也叫做行编辑器;它是一个字处理器工具【与字处理工具相对应的就是文本编辑器,类似于nona或者vi vim(他们都是文本编辑器,或者说是全屏编辑器)】

  sed并不是直接去处理文件本身,而是将每一行的数据读取到内存中区,再在内存中进行处理,并显示在屏幕上。而内存提供出来处理这个数据的空间我们叫做模式空间

  需要注意的是,sed命令默认不编辑源文件,仅对模式空间中的数据进行修改和处理,然后处理结束后,将模式空间中处理好的数据显示在屏幕上。

sed命令的用法

  sed [option] ... {script-only-if-no-orther-script} [input-file]

  这里的script-only-if-no-orther-script可以理解为sed命令自己的语言,它有自己独立的语法结构;

  sed [option] 'AddressCommand' file ...

  option  选项类型

    -n  静态模式,不再默认显示模式空间中的内容

    -i  直接修改原文件(这种做法很危险)

    -e  -e Script 表示可以同时执行多个脚本

    -f  /path/to/sed_script 将脚本文件写在其他脚本中,这样就需要通过-f来调用这个脚本文件

    -r  表示可以使用扩展的正则表达式

  Address  表示需要处理的对象的行或者地址

    1、startline,endline

      1,100  #表示处理第一行到第一百行;

      $  表示处理最后一行;

      $-1  表示处理倒数第二行;

    2、也可以指定模式,使用正则表达式 /RegExp/ (例如:/^root/ 表示匹配以root开头的字符)

    3、也可以指定模式:/pattern1/,/pattern2/

      第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间所有的行都会被匹配到。

    4、linenumber

      精确指定某行进行匹配

    5、StartLine,+N

      从指定的行开始,到后面的N行,都会被匹配上,总共N+1行;

  Command  指定sed选出来后的行为

    d 表示删除符合条件的行

      sed '1,2d' /etc/fstab

      sed '3,$-1d' /etc/fstab

      sed '/oot/d' /etc/fstab  #删除包含有“oot”字符串的行

      sed '1,+2d' /etc/fstab

      sed '1d' /etc/fstab

    p 表示显示(打印)符合条件的行

      sed '/^\//p' /etc/fstab  #打印以 / 开头的行,其中 \ 表示转意符

      sed -n '/^\//p' /etc/fstab  #-n表示不再默认显示模式空间中的内容

    a 在匹配到的行后面增添新的内容

      a “\string” 这样写表示后面再新增string内容;

      sed '/^\//a \hello world' /etc/fstab

      sed '/^\//a \hello world\n#hello,linux' /etc/fstab  #其中\n表示换行符号

    i 在指定的前面添加新的内容,内容为string

      sed '/^\//i \hello world ' /etc/fstab

    r filename  将指定的文件内容添加到符合条件的行处

      sed '2r /etc/issue' /etc/fstab  #在第二行的地方将文件/etc/issue的内容添加进来

      sed '1,2r /etc/issue' /etc/fstab

    w filename  将指定范围的内容另存为一个指定的文件

      sed '/oot/w /tmp/oot.txt' /etc/fstab  #将包含“oot”字符串的行从新保存至/tmp/oot.txt文件中去

    s 查找并替换相关的内容

      s/pattern/sting/  将pattern匹配到的内容替换为后者string的内容,而pattern是支持正则表达式的;

      默认情况下,s命令只替换每行中第一次被pattern匹配到的字符串,如果想要将所有匹配到的字符串均进行替换,就需要再最后面加上:g 全局替换参数,i 忽略字符大小写参数

      【s命令的分隔符可以使用 / ,同时,也可以换成其他的符号,例如:s@pattern@string@、s#pattern#string#】

      sed 's/oot/OOT/' /etc/fstab

      sed 's/^\//#/' /etc/fstab

      sed 's@/@#@' /etc/fstab

      sed 's/l/L/g' /etc/fstab

sed语句的后向引用

  &  用来匹配前面pattern关联的整个字符串;

      sed 's#l..e#&r#g' sed.txt

      sed 's#\(l..e\)#\1r#g' sed.txt

  但是,在一些情况下必须使用后向引用,而不能使用&符来调用之前的pattern所匹配的内容

练习

  1、删除/etc/grub.conf文件中的行首的空白符
    sed -r 's@^[[:space:]]+@@g' /etc/grub.conf
  2、替换/etc/inittab文件中“id:3:initdefault:”一行中的,中间任意一个数字,将其替换为5;
    sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
  3、删除/etc/inittab文件中的空白行;
    sed '/^$/d' /etc/inittab
  4、删除/etc/inittab文件中的开头的#号;
    sed '/^#/d' /etc/inittab
    sed 's@^#@@g' /etc/inittab
  5、删除/etc/inittab文件中的开头的#号,但要求#号后面必须有空白字符;
    sed -r 's@^#[[:space:]]+@@' /etc/inittab
  6、删除某文件中以空白字符后面跟了#类的行中的开头的空白字符及#号;
    sed -r 's@^[[:space:]]+#@@g' /etc/inittab
  5、取出一个文件路径的目录名称;
    echo "/etc/rc.d" | sed -r 's@^(/.*/)[^/]+/?@\1@g'

10 sed命令的基本用法的更多相关文章

  1. linux sed命令参数及用法详解

    linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...

  2. 轻松学会文本处理工具之二 linux sed命令

    sed命令的语法格式: sed的命令格式: sed [option]  'sed command'filename sed的脚本格式:sed [option] -f  'sed  script'fil ...

  3. linux下sed命令详解

    sed:Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器.能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模式的内容输入到屏幕上 ...

  4. 转 linux之sed命令详解

    http://jingyan.baidu.com/article/fec4bce2228f60f2618d8bb0.html sed  编辑裁剪文件命令 sed -i "s/\/db\/te ...

  5. sed命令基础

    sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space ...

  6. Ubuntu 14.10 下sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  7. sed命令用法详解

    sed命令用法 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space) ...

  8. <三剑客> 老二:sed命令用法

    sed命令的用法: sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ...

  9. SED命令用法整理

    sed '/Started/'q  匹配到Started字符串则退出sed命令 sed '/Started/{/in/q}'  同时匹配到Started和in两个字符时则退出sed命令 ------- ...

随机推荐

  1. Mysql主从同步问题汇总

    data-1-1主机是master,data-1-2是slave Last_IO_Errno: 1236 slave查看show slave status\G; 显示Last_IO_Errno: 12 ...

  2. kafka 的 docker 镜像使用

    Kafka 还没有提供官方的镜像(2019.01.29),能找到的都是一些社区维护的镜像包. 这里使用这个镜像:https://hub.docker.com/r/spotify/kafka

  3. NET设计模式 第二部分 结构性模式(11):外观模式(Façade Pattern)

    外观模式(Façade Pattern) ——.NET设计模式系列之十二 Terrylee,2006年3月 概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着 ...

  4. SQL优化之count(*),count(列)

    一.count各种用法的区别 1.count函数是日常工作中最常用的函数之一,用来统计表中数据的总数,常用的有count(*),count(1),count(列).count(*)和count(1)是 ...

  5. elasticsearch _script 脚本排序

    具体脚本语法请自行搜索“Groovy”语法. { "from" : 0, "size" : 5, "query" : { "boo ...

  6. RichEdit文字背景色的处理

    uses RichEdit; procedure RichEditSetBackColor( // 设置RichEdit文字背景色 mRichEdit: TRichEdit; // Rich编辑框 m ...

  7. ubuntu 阿里云 常出问题 运维工作日志

    一.2015-8.26(数据库 error—28) tmp文件临时数据写入不了----解决办法 1.查看临时文件 ls -l 找到了 2.由此可以查看得出来tmp文件有的权限是有的 3.查看tmp 存 ...

  8. Java封装案例

    ---恢复内容开始--- 在类的getter/setter方法中在getter方法中要先实列话 在构造方法中无参构造(必须要构造)好处很多!!! 描述学生信息及相关联的专业信息 把Subject和St ...

  9. 黄聪:PHP代码获取客户端IP地址经纬度及所在城市

    echo $_SERVER['HTTP_HOST']; //echo $_SERVER['REQUEST_URI']; $getIp=$_SERVER["REMOTE_ADDR"] ...

  10. 在vue项目中 获取容器的高度

    左右并列两个容器,左边的不固定高度,右侧的高度要和左边的高度一致, var offsetHeight = $('.left).outerHeight(); $('.right').outerHeigh ...