SED是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。


SED的命令执行流程

sed会从数据中一条一条的读取命令,逐条处理和输出,直到数据的最后一行。

模式空间:sed软件内部的一个临时缓存,用于存放读取到的内容。


SED命令和功能

  • 命令格式
  sed [options] [command] [inputfile(s)]sed [options] -f scriptfile

文中统一实验文件

[root@CentOS7 ~]$cat test
aaa,bbb,ccc
ddd,eee,fff
ggg,hhh,iii
jjj,kkk,lll
mmm,nnn,oooppp,qqq,rrr
  • 选项

-n:不输出模式空间内容到屏幕,即不自动打印
-e: 多点编辑
-f: /PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r: 支持使用扩展正则表达式
-i.bak: 备份文件并原处编辑
-h或–help:显示帮助
-V或–version:显示版本信息

  • sed命令

a\ -在当前行下面插入文本。
i\ -在当前行上面插入文本。
d -删除,删除选择的行。
D -删除模板块的第一行。
s -替换指定字符
h -拷贝模板块的内容到内存中的缓冲区。
H -追加模板块的内容到内存中的缓冲区。
g - 获得内存缓冲区的内容,并替代当前模板块中的文本。
G -获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l -列表不能打印字符的清单。
n -读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N -追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p -打印模板块的行。 P(大写) 打印模板块的第一行。
q -退出Sed。
! -表示后面的命令对所有没有被选定的行发生作用。
= -打印当前行号码。 # 把注释扩展到下一个换行符以前。

查找替换

  s///:查找替换,支持使用其它分隔符, s@@@, s###替换标记:g: 行内全局替换p: 显示替换成功的行w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

地址定界:

 (1) 不给地址:对全文进行处理(2) 单地址:#:指定的行/pattern/:被此处模式所能够匹配到的每一行(3) 地址范围:#,##,+#/pat1/,/pat2/#,/pat1/(4) ~:步进1~2 奇数行2~2 偶数行

实例演示

1、输出原数据并打印第二行

[root@CentOS7 ~]$sed '2p' test
aaa,bbb,ccc
ddd,eee,fff
ddd,eee,fff
ggg,hhh,iii
jjj,kkk,lll
mmm,nnn,oooppp,qqq,rrr

2、只打印数据第二行

[root@CentOS7 ~]$sed -n '2p' test
ddd,eee,fff

3、打印1到4行

[root@CentOS7 ~]$sed -n '1,4p' test
aaa,bbb,ccc
ddd,eee,fff
ggg,hhh,iii
jjj,kkk,lll

4、只打印含有“ggg”的行

[root@CentOS7 ~]$sed -n '/ggg/p' test
ggg,hhh,iii

5、打印从第二行到含有”ggg”的行

[root@CentOS7 ~]$sed -n '2,/ggg/p' test
ddd,eee,fff
ggg,hhh,iii

6、显示空行行号

[root@CentOS7 ~]$sed -n '/^$/=' test
6

7、打印空行和空行行号

sed -n -e '/^$/p' -e '/^$/=' test6

8、在含有“ggg”的行后加入“test”

[root@CentOS7 ~]$sed '/ggg/a\test' test
aaa,bbb,ccc
ddd,eee,fff
ggg,hhh,iii
test
jjj,kkk,lll
mmm,nnn,oooppp,qqq,rrr

9、在含有“ggg”行前加上“test”

[root@CentOS7 ~]$sed '/ggg/i\test' test
aaa,bbb,ccc
ddd,eee,fff
test
ggg,hhh,iii
jjj,kkk,lll
mmm,nnn,oooppp,qqq,rrr

10、将含有“ggg”的行替换成“test”

[root@CentOS7 ~]$sed '/ggg/c\test' test
aaa,bbb,ccc
ddd,eee,fff
test
jjj,kkk,lll
mmm,nnn,oooppp,qqq,rrr

11、删除空行

[root@CentOS7 ~]$sed '/^$/d' test
aaa,bbb,ccc
ddd,eee,fff
ggg,hhh,iii
jjj,kkk,lll
mmm,nnn,ooo
ppp,qqq,rrr

12、将文件中前3行删除

[root@CentOS7 ~]$sed '1,3d' test
jjj,kkk,lll
mmm,nnn,oooppp,qqq,rrr

13、使用管道删除2到4行

[root@CentOS7 ~]$nl test | sed '2,4d'1  aaa,bbb,ccc5  mmm,nnn,ooo6  ppp,qqq,rrr

14、将文件中的“ggg”替换成“XXX”

[root@CentOS7 ~]$sed 's/g/X/g' test
aaa,bbb,ccc
ddd,eee,fff
XXX,hhh,iii
jjj,kkk,lll
mmm,nnn,oooppp,qqq,rrr
[root@CentOS7 ~]$sed 's/ggg/XXX/' test
aaa,bbb,ccc
ddd,eee,fff
XXX,hhh,iii
jjj,kkk,lll
mmm,nnn,oooppp,qqq,rrr

15、在“ggg”单词前加入“XXX”

[root@CentOS7 ~]$sed -n 's/ggg/XXX&/p' test
XXXggg,hhh,iii

16、在“ggg”单词后面加入“XXX”

[root@CentOS7 ~]$sed -n 's/ggg/&XXX/p' test
gggXXX,hhh,iii

17、将“ggg”替换成“XXX”,并将“ooo”替换成“YYY”

[root@CentOS7 ~]$sed -e 's/g/X/g' -e 's/ooo/YYY/' test
aaa,bbb,ccc
ddd,eee,fff
XXX,hhh,iii
jjj,kkk,lll
mmm,nnn,YYYppp,qqq,rrr

18、将“ggg”替换成“XXX”并备份一份.bak文件

[root@CentOS7 ~]$sed -i.bak 's/ggg/xxx/' test
[root@CentOS7 ~]$cat test.bak
aaa,bbb,ccc
ddd,eee,fff
ggg,hhh,iii
jjj,kkk,lll
mmm,nnn,oooppp,qqq,rrr
[root@CentOS7 ~]$cat test
aaa,bbb,ccc
ddd,eee,fff
xxx,hhh,iii
jjj,kkk,lll
mmm,nnn,oooppp,qqq,rrr

19、打印奇数行

[root@CentOS7 ~]$cat test | sed -n '1~2p'
aaa,bbb,ccc
ggg,hhh,iii
mmm,nnn,ooo
ppp,qqq,rrr

20、打印偶数行

[root@CentOS7 ~]$cat test | sed -n '2~2p'
ddd,eee,fff
jjj,kkk,lll
[root@CentOS7 ~]$sed -n 'n;p' test
ddd,eee,fff
jjj,kkk,lll

21、倒叙显示文件内容

[root@CentOS7 ~]$sed '1!G;h;$!d' test
ppp,qqq,rrrmmm,nnn,ooo
jjj,kkk,lll
ggg,hhh,iii
ddd,eee,fff
aaa,bbb,ccc
[root@CentOS7 ~]$sed -n '1!G;h;$p' test
ppp,qqq,rrrmmm,nnn,ooo
jjj,kkk,lll
ggg,hhh,iii
ddd,eee,fff
aaa,bbb,ccc

22、显示文件的最后一行

[root@CentOS7 ~]$sed 'N;D' test
ppp,qqq,rrr
[root@CentOS7 ~]$sed '$!d' test
ppp,qqq,rrr

23、显示文件的最后两行

[root@CentOS7 ~]$sed '$!N;$!D' testppp,qqq,rrr

24、每行后面加入空行

[root@CentOS7 ~]$sed 'G' test
aaa,bbb,cccddd,eee,fffggg,hhh,iiijjj,kkk,lllmmm,nnn,oooppp,qqq,rrr

25、将文件所有内容改成空行

[root@CentOS7 ~]$sed 'g' test 

26、将文件中空行删除,之后在每行后面插入空行

[root@CentOS7 ~]$sed '/^$/d;G' test
aaa,bbb,cccddd,eee,fffggg,hhh,iiijjj,kkk,lllmmm,nnn,oooppp,qqq,rrr

27、删除文件中的偶数行

[root@CentOS7 ~]$sed 'n;d' test
aaa,bbb,ccc
ggg,hhh,iii
mmm,nnn,ooo
ppp,qqq,rrr

Linux三剑客之SED相关推荐

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

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

  2. 12.Linux三剑客之sed

    文章目录 1.sort命令 2.uniq 命令 3.cut 命令 4.tr命令 6.wc命令 7.linux三剑客之sed 7.1格式 7.2参数 7.3定位 1.数字定位法 2.正则定位法 3.数字 ...

  3. 深入浅出linux三剑客之sed必杀技一例

    缘起:上完培训课后,同学们对sed加正则处理问题的热情高涨,氛围相当好,但是,有个别同学还是有些晕乎,因此,撰写此文.此例如果搞熟练了,sed和正则的大部分常用技术你掌握起来就简单了. 如果还有不会的 ...

  4. 15分钟搞定Linux三剑客 grep sed awk

    剑客grep 来者何人 grep是linux上的字符串搜索匹配命令.这个名字来自于linux编辑器vim的一个命令g/re/p,表示全局匹配某个正则表达式并打印出来,这也体现了grep自身的功能. 基 ...

  5. Linux三剑客 grep sed awk 详细使用方法

    Linux中最重要的三个命令在业界被称为"三剑客",它们是awk,sed,grep. 我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文 ...

  6. linux三剑客面试题,Linux三剑客之sed

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? sed命令主要用来修改文本文件用的,使用命令的方式来快速修改文件. 和vim一样,但是它是使用交互式命令的. 一般和管道 ...

  7. linux三剑客之sed命令精讲

    1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令 ...

  8. Linux 三剑客之SED行天下

    功能说明 Sed是Strem Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. [root@oldboy ~]# sed --version #→ ...

  9. linux三剑客awk、sed、grep与cut的总结

    在Linux中,一切皆文件,对Linux的操作就是对文件的处理.对文件操作处理最重要的三个命令是grep.sed.awk,它们在业界被称为"三剑客". 三剑客的功能非常强大,但它们 ...

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

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

最新文章

  1. 老程序员的经验和价值在哪里
  2. 梁胜博士亲解Rancher 2.0:K8s之上的Rancher魔法
  3. 线性链条件随机场与HMM在viterbi算法中的图解对比
  4. android和windows技术,《技术》android运行windows的优化与试调整
  5. instr 函数从后往前计数 instr(spell,' ',-1)
  6. 【渝粤教育】广东开放大学 中国法律史 形成性考核 (31)
  7. pl/sql实现打印九九乘法表
  8. 挥别百度,那些顶级技术人才都去哪儿了?
  9. 入侵检测技术目的-发现黑客
  10. 苹果手机解压缩软件_照片压缩软件哪款好用?推荐5款好用的图片压缩软件
  11. 智慧校园视频监控管理系统平台建设的详情分析
  12. 树莓派系统备份与还原
  13. 关于(广义)代数特征值问题的一点注记
  14. CentOS6.5下MariaDB日志及事物详解和基本操作语句
  15. 核桃编程学python吗_西瓜编程和核桃编程哪个好
  16. Android音频学习之MediaExtractor,提取音频视频轨道数据(从视频中分离音频视频数据)
  17. 【动态规划】HDU 1081 XMU 1031 To the Max
  18. jenkins-配置python
  19. 计算机语言绝对值表示方法,python表示绝对值的方法是什么
  20. 嫌官方文档太烂?TensorFlow 开源工具书,助你快速上手开发!

热门文章

  1. 【FinE】EMD/EEMD方法及金融数据分解
  2. c语言点阵字库12*16,用C语言编程16点阵字库
  3. P8-图标字体-font-awesome-伪类-阿里图标字体icnfont-字体-行高-文本样式
  4. 微信小程序switch 样式重写
  5. java更改文件编码方式_java 更改文件编码
  6. openmodelica安装
  7. xp系统无法访问服务器共享打印机,XP系统无法访问共享打印机解决方案
  8. win7打开xp共享的计算机,win7系统如何访问xp共享打印机_windows7连接xp共享打印机的方法...
  9. 中国电信物联网平台入门学习笔记4:连接时间过长,数据传输消失,电信平台显示延迟...
  10. 嵌入式单片机基础篇(五)之stm32F1以及51单片机时钟详解