• Sed功能说明
     Sed是Strem Editor(流编辑器)缩写,是操作、过滤和转换文本内容的强大工具。常用功能有增删改查,过滤,取行。
[root@old ~]# sed --version  #→ sed软件版本
GNU sed version 4.2.
  • 命令执行流程
概括流程:Sed软件从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行……
模式空间 : Sed软件内部的一个临时缓存,用于存放读取到的内容。
  • 语法格式
     sed [options] [sed-commands] [input-file]
     sed [选项]     [sed命令]      [输入文件]
说明:
1. 注意sed和后面的选项之间至少有一个空格。
2. 为了避免混淆,本文称呼sed为sed软件。sed-commands(sed命令)是sed软件内置的一些命令选项,为了和前面的options(选项)区分,故称为sed命令。
3. sed-commands既可以是单个sed命令,也可以是多个sed命令组合。
4. input-file(输入文件)是可选项,sed还能够从标准输入如管道获取输入。
  • 指定执行的地址范围
 
sed软件可以对单行或多行进行处理。如果在sed命令前面不指定地址范围,那么默认会匹配所有行。
用法:n1[,n2]{sed-commands}
地址用逗号分隔的,n1,n2可以用数字、正则表达式、或二者的组合表示。
 
用法集锦:
   10{sed-commands}               对第10行操作
   10,20{sed-commands}             对10到20行操作,包括第10,20行
   10,+20{sed-commands}        对10到30(10+20)行操作,包括第10,30行
   1~2{sed-commands}             对1,3,5,7,……行操作
   10,${sed-commands}            对10到最后一行($代表最后一行)操作,包括第10行
         /text/{sed-commands}             对匹配text的行操作
         /text/,/Alex/{sed-commands}     对匹配text的行到匹配Alex的行操作
         /text/,${sed-commands}          对匹配text的行到最后一行操作
         /text/,10{sed-commands}        对匹配text的行到第10行操作,注意:如果前10行没有匹配到old,sed软件会显示10行以后的匹配text的行,如果有。
         1,/text/{sed-commands}           对第1行到匹配Alex的行操作
         /text/,+2{sed-commands}          对匹配old的行到其后的2行操作
 
  • 增删改查 功能
     增
     a 追加文本到指定行后
     i 插入文本到指定行前
     单行增加
     例:

    [root@admin ~]# sed '2a 106,dandan,CSO' text.txt
,old,CEO
,zhang,CTO
,dandan,CSO
,Alex,COO
,yy,CFO
,feixue,CIO
[root@admin ~]# sed '2i 106,dandan,CSO' text.txt
,old,CEO
,dandan,CSO
,zhangyao,CTO
,Alex,COO
,yy,CFO
,feixue,CIO
d 删除指定的行
[root@admin ~]# sed 'd' person.txt
[root@admin ~]#
[root@admin ~]# sed '2d' person.txt
,admn,CEO
,Alex,COO
,yy,CFO
,feixue,CIO
按行替换
c 命令用:新行取代旧行
     [root@admin ~]# sed '2c 106,dandan,CSO' person.txt
,admin,CEO
,dandan,CSO
,Alex,COO
,yy,CFO
,feixue,CIO

文本替换

     s:单独使用→将每一行中第一处匹配的字符串进行替换 ==>sed命令
     g:每一行进行全部替换 ==>sed命令s的替换标志之一,非sed命令
     -i:修改文件内容 ==>sed软件的选项
     sed软件替换模型(方框▇被替换成三角▲)
     sed -i 's/▇/▲/g' text.log
     sed -i 's#▇#▲#g' text.log
 
指定行修改配置文件
     指定行精确修改配置文件,这样可以防止修改多了地方。
   [root@admin ~]# sed '3s#0#9#' text.txt

     ,admin,CEO
,zhang,CTO
,Alex,COO
,yy,CFO
,feixue,CIO
  •  分组替换\( \)和\1的使用说明
     sed软件的\( \)的功能可以记住正则表达式的一部分,其中,\1为第一个记住的模式即第一个小括号中的匹配内容,\2第二记住的模式,即第二个小括号中的匹配内容,sed最多可以记住9个。
例:echo I am old teacher.如果想保留这一行的单词old,删除剩下的部分,使用圆括号标记想保留的部分。
[root@old ~]# echo I am old teacher. |sed 's#^.*am \([a-z].*\) tea.*$#\1#g'
old
[root@old ~]# echo I am old teacher. |sed -r 's#^.*am ([a-z].*) tea.*$#\1#g'
old
[root@old ~]# echo I am old teacher. |sed -r 's#I (.*) (.*) teacher.#\1\2#g'
amold
  •  特殊符号&代表被替换的内容
[root@admin ~]# sed '1,3s#C#--&--#g' person.txt #→此处&等于C
,admin,--C--EO #→将1到3行的C替换为--C--
,zhang,--C--TO
,yy,--C--OO
,feixue,CFO
,dandan,CIO
p 输出指定内容,但默认会输出2次匹配的结果,因此使用n取消默认输出
按行查询
admin[root@oldboy ~]# sed -n '2p' text.txt
,zhang,CTO
  • sed模式空间

    #cat test.txt
    This is
    This is
    This is
    This is
    This is
n命令简单来说就是提前读取下一行,覆盖模型空间前一行,然后执行后续命令。然后再读取新行,对新读取的内容重头执行sed。
例子:提取偶数行  
sed -n 'n;p' test.txt
N命令简单来说就是追加下一行到模式空间,同时将两行看做一行,但是两行之间依然含有\n换行符,然后执行后续命令。然后再读取新行,对新读取的内容重头执行sed。此时,新读取的行会覆盖之前的行(之前的两行已经合并为一行)
例子:提取奇数行
sed -n 'N;P' test.txt  -----因为读取第5行时,执行N,发现没有第6行,不满足,就退出,放弃P命令
This is
This is
sed -n ‘$!N;P’ test.txt
This is
This is
This is

注释:读取1,$!条件满足(不是尾行),执行N命令,得出1\n2,执行P,打印得1,读取3,$!条件满足(不是尾行),执行N命令,得出3\n4,执行P,打印得3,读取5,$!条件不满足,跳过N,执行P,打印得5

 
 
d命令是删除当前模式空间内容(不再传至标准输出),并放弃之后的命令,并对新读取的内容,重头执行sed。
[root@localhost ~]# sed ‘n;d’ a.txt
This is
This is
This is

注释:读取1,执行n,得出2,执行d,删除2,得空,以此类推,读取3,执行n,得出4,执行d,删除4,得空,但是读取5时,因为n无法执行,所以d不执行。因无-n参数,故输出1\n3\n5

 
 
D命令是删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed。
[root@localhost ~]sed ‘N;D’ test.txt
This is
注释:读取1,执行N,得出1\n2,执行D,得出2,执行N,得出2\n3,执行D,得出3,依此类推,得出5,执行N,条件失败退出,因无-n参数,故输出5
 
h命令是将当前模式空间中内容覆盖至缓存区
H命令是将当前模式空间中的内容追加至缓存区
g命令是将当前缓存区中内容覆盖至模式空间
G命令是将当前缓存区中的内容追加至模式空间

三剑客之SED的更多相关文章

  1. 文本处理三剑客之sed命令

    第十八章.文本处理三剑客之sed命令 目录 sed介绍 sed命令常用选项 sed常用编辑命令 sed使用示例 sed高级语法 18.1.sed简介 sed全名stream editor,流编辑器,s ...

  2. Linux实战教学笔记12:linux三剑客之sed命令精讲

    第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

  3. (转)不看绝对后悔的Linux三剑客之sed实战精讲

    不看绝对后悔的Linux三剑客之sed实战精讲 原文:http://blog.51cto.com/hujiangtao/1923718 二.Linux三剑客之sed命令精讲 1,前言 我们都知道,在L ...

  4. shell编程系列13--文本处理三剑客之sed利用sed追加文件内容

    shell编程系列13--文本处理三剑客之sed利用sed追加文件内容 追加用法总结: .a 在匹配行后面追加 .i 在匹配行前面追加 .r 将文件内容追加到匹配行后面 .w 将匹配行写入指定文件 追 ...

  5. shell编程系列12--文本处理三剑客之sed利用sed修改文件内容

    shell编程系列12--文本处理三剑客之sed利用sed修改文件内容 修改命令对照表 编辑命令 1s/old/new/ 替换第1行内容old为new ,10s/old/new/ 替换第1行到10行的 ...

  6. shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容

    shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容 删除命令对照表 命令 含义 1d 删除第一行内容 ,10d 删除1行到10行的内容 ,+5d 删除10行到16行的内容 /p ...

  7. shell编程系列10--文本处理三剑客之sed利用sed查询特定内容

    shell编程系列10--文本处理三剑客之sed利用sed查询特定内容 利用sed查找文件内容: pattern种类: .8p .,10p .,+5p ./regexp/p .,/regexp/p . ...

  8. shell编程系列9--文本处理三剑客之sed概述及常见用法总结

    shell编程系列9--文本处理三剑客之sed概述及常见用法总结 sed的工作模式:对文本的行数据一行行处理,如下图 sed(stream editor),是流编辑器,依据特定的匹配模式,对文本逐行匹 ...

  9. day14 linux三剑客之sed命令

    day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...

  10. 文本处理的命令,三剑客之sed

    文本处理的命令 1.sort命令 "用于将文件内容加以排序" 参数: -n :按照数值的大小排序 -r :以相反的顺序来排序 -k :以某列进行排序 -t :指定分隔符,默认是以空 ...

随机推荐

  1. 关于VR边纹理材质的渲染

    前段时间经常渲染白模线框的图,写了这个脚本方便工作,后来又加了中英文适配,今天贴上来. fn YY_edgestex = ( vr = renderers.current case of ( (vr材 ...

  2. liunx之:ln命令

    linux  一个很重要的命令 它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是: ln -s  源文件 目标文件    -s 是 symbolic的意思 ...

  3. Qt中数据模块学习

    QtSql模块 驱动类型和数据库:不同的数据库用不同的驱动连接(接口不同) QDB2->DB2 QOCI->orcle QODBC->SQLServer等 QSqlDataBase类 ...

  4. HTML5 Canvas核心技术图形动画与游戏开发(读书笔记)----第一章,基础知识

    一,canvas元素 1 为了防止浏览器不支持canvas元素,我们设置“后备内容”(fallback content),下面紫色的字即为后备内容 <canvas id="canvas ...

  5. 让CSS布局更加直观:box-sizing

    让CSS布局更加直观:box-sizing 如果你写过CSS或者你接触过CSS,相信你一定对盒子模型一点都不陌生.CSS其中一个让人比较困惑的地方就在于它的盒子模型中关于高度和宽度的计算,别说那些初学 ...

  6. ASP.NET: 正在中止线程 错误原及解决方法

    #[操作记录]:2010-02-23 9:25:12  System.Threading.ThreadAbortException: 正在中止线程. 症状 如果使用 Response.End.Resp ...

  7. 怎么查看bios版本

    怎么查看bios版本呢?无需去注册表查看,无需去BIOS中查看,只需要一条简单的命令即可,下面就来一起看一看怎么查看bios版本: Win键+R打开“运行”,然后再“运行”中输入cmd进而打开“cmd ...

  8. Hibernate5.2关联关系之双向一对多(三)

                                                           Hibernate之双向一对多(三) 一.简介 本篇博文接着上一章的内容接着开展,代码也是 ...

  9. mfc 控件字体设置

    将以下代码加入至 OnInitDialog() 中 // TODO: Add extra initialization here CFont * m_font= new CFont; m_font-& ...

  10. git 删除untracked 文件(转载)

    From:http://zhidao.baidu.com/question/983440344933263859.html git clean命令可以删除未被版本库跟踪的文件或目录. # 删除 unt ...