sed简介

sed是什么

sed是linux文本处理工具三剑客(grep,sed,awk)之一,用来处理文本的流编辑工具。主要用来编辑一个或多个文件,简化重复操作文件。


sed的工作原理和相关概念

sed是行处理的模式,针对文件内容从上往下一行一行地读取。每行的操作步骤如下示意图:

sed-原理.png


sed的语法格式

sed [OPTION]... 'script' [input-file] ...

options

-n 或者 –quiet 或者 –silent:仅显示经过脚本处理(执行写操作)的模式空间的内容 
-e 或者 –expression:以选项中的指定的script来处理输入的文本文件; 
-f 或者 –file:以选项中指定的script文件来处理输入的文本文件 
-h 或者 –help:显示帮助信息 
-V 或者 –version:显示版本信息

script

script中包含了两部分,定界符和命令处理

  • 定界符

1、空地址:表示在全文范围
2、单地址:  
    #:指定行;  
    /pattern/:被此模式所匹配到的每一行;
3、地址范围:  
    #,#:从起始行到结束行  
    #,+#:从第起始行,向后数多少行  
    #,/par1/:从起始行到pat1第一次匹配到的行  
    /pat1/,/pat2/:从pat1第一次匹配到的行到pat2第一次匹配到的行  
    $:最后一行
  • 处理命令

    d:删除当前模式空间中的内容    
    p:将当前模式空间中的内容送到标准输出
    a\text:在当前模式空间后面追加内容text,支持\n追加多行
    i\text:在当前模式空间前面插入内容text,支持\n插入多行
    c\text:把当前模式空间的内容替换为text,支持\n替换为多行
    r /PATH/FROM/FILE:读取指定文件的内容,追加到当前模式空间后面
    =:在当前模式空间前面插入当前模式空间在源文件中的行号
    !:命令前加!,给定界符取反,不在定界范围内才执行命令
    s/pat1/text/:查找替换,分隔符可自定义,如@@@,###等    
        修饰标记:        
            g:全局替换,没有此标记,只替换正则匹配到的第一项        
            w /PATH/TO/FILE:将替换后的内容保存一份至指定文件        
            p:将替换成功的内容送至标准输出

sed每次执行时还拥有一个保持空间(hold space),用来临时保存内容,开始时默认是一个空行。在模式空间和保存空间之间来回操作内容,可以实现一些很复杂的功能。下面是一些高级命令:

    h:把当前模式空间中的内容覆盖至保持空间中    
    H:把当前模式空间中的内容追加至保持空间中
    g:把保持空间的内容覆盖至当前模式空间中
    G:把保持空间的内容追加至当前模式空间中
    x:把当前模式空间和保持空间中的内容互换
    n:我的理解是对模式空间的内容执行一次输出测试,然后再覆盖读取文件下一行的内容到模式空间中
    N:我的理解是对模式空间的内容执行一次标准输出测试,然后再覆盖读取文件下一行的内容到模式空间中        
            标准输出测试(我自创的概念,见上面工作原理图):就是判断是否用了-n选项,没有则将模式空间的内容送至标准输出,否则丢弃模式空间的内容
    d:删除模式空间中的行
    D:删除模式空间中的所有行
  • 个人理解:每读行的内容对应的模式空间的内容处理完毕时,都会进行一次输出测试,而n和N命令在读取下一行之前,当前行也被处理完毕,也会进行一次标准输出测试。

原创文章,作者:小江,如若转载,请注明出处:http://www.178linux.com/50086

(0)
小江小江
上一篇 2016-10-09 09:06
下一篇 2016-10-09 09:06

相关推荐

  • 用户相关文件简介

    2016/10/23 总结关于用户和组相关的配置文件 Linux系统主要有4个文件与用户和组的配置有关, 主要为/etc/passwd  /etc/shadow   /etc/group  /etc/gshadow 首先来解释一下什么是用户,什么是组 用户:      管理员用户&nbsp…

    Linux干货 2016-10-24
  • N28_第二周

    linux文件管理命令

    Linux干货 2017-12-10
  • 有关shell脚本

    SHELL脚本 在Linux运维工作中有着大量的重复性质的工作,比如同时给很多台的服务器备份,查看多台的内存情况,等等。这样的情况下总不能一个一个服务器自己去看,那样耗时,费力,还容易出错。所以编写程序来做这些事情就成了必要的工作。而SHELL就是完成这项工作的。   脚本第一行的开头写上#!/bin/bash 这是属于格式性质的,作用在于加上执行…

    2017-08-12
  • bash脚本作业

    1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。 2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出。 1、求100以内所有正整数之和 2、通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,…

    Linux干货 2016-08-19
  • Linux中的man命令使用方法

      Linux中的man命令就是manual的缩写,此命令是用来查看系统中自带的各种参考手册,帮助用户更好的了解并使用命令。   man命令的使用格式为: man COMMAND,即man后面跟上需要查询的命令,进到手册后有如下快捷按钮帮助用户更好的操作手册。     1.按键-j &nb…

    Linux干货 2016-10-20
  • PHP字符串的编码问题

        大家都知道,不同字符编码,其在内存占用的字节数不一样。如ASCII编码字符占用1个字节,UTF-8编码的中文字符是3字节,GBK为2个字节。     PHP 也自带几种字符串截取函数,其中常用到的就是 substr 和 mb_substr。     使用substr截取中…

    Linux干货 2015-10-22