(一)Sed流文本编辑器介绍

sed (Stream EDitor) 本质上是一个编辑器,但是它是非交互式的,这点与VIM不同;同时它又是面向字符流的,输入的字符流经过sed的处理后输出。这两个特性使得sed成为命令行下面非常有用的一个处理工具,同时sed能够完美的配合正则表达式使用。

这里先谈一下交互式和非交户式的编辑器。

Vim:需要进到文本里面进行操作。

sed:不需要进行到文本里面进行操作。

而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令),接着读入下一行。整个文件像流水一样被逐行处理然后逐行输出。这个就是流编辑器。

最后,sed能够非常完美的配合正则表达式使用。

(二 )Sed流文本编辑器的格式

sed命令的格式:

sed [options] ' script' inputfile(s)

options是指sed的命令行参数,这一块并不是重点,参数也不多。

script是指需要对输入执行的一个或者多个操作指令(instruction),sed会依次读取输入文件的每一行到缓存中并应用script中指定的操作指令,因此而带来的变化并不会影响最初的文件(注:如果使用sed时指定-i参数则会影响最初的文件)。

同大多数Linux命令一样,sed也是从stdin中读取输入,并且将输出写到stdout,但是当filename被指定时,则会从指定的文件中获取输入,输出可以重定向到文件中,但是需要注意的是,该文件绝对不能与输入的文件相同。

如果操作指令很多,为了不影响可读性,可以将其写到文件中,并通过-f参数指定scriptfile:

sed -f scriptfile filename

这里有一个建议,在命令行中指定的操作指令最好用单引号引起来,这样可以避免shell对特殊字符的处理(如空格、$等)。这个建议同样适用grep/awk等命令,当然如果有时候确实不适合使用单引号时,记得对特殊字符转义。

Sed选项:

–n 要读取的行号,可以关闭自动打印
-e 执行多个sed 命令
-f 运行脚本
-i 编辑文件内容
-i.bak 编辑的同时创造.bak的备份
-r 使用扩展的正则表达式

Sed命令

1 基本命令

p 打印当前模式空间的内容,追加到默认输出之后 \n
d 删除模式空间匹配的行,并进行下一轮循环
a 在匹配后追加文本,支持使用\n来实现多行追加
i 在匹配行前面加入文本
c 替换,把选定的行改为新的文本
w 保存模式匹配的行,到新的文件中。w/pattern/file
r 读取文件/一行,相当于在符合的行后面追加文件/行。

2 替换命令:

s///:查找替换,支持使用其它分隔符,s@@@,s###

g 在行内进行全局替换

不加g替换行内第一个符合的字符串。

3 高级命令

N 追加下一行内容到当前行\n后面
D 删除\n 之前的内容
P打印当前模式空间开端至\n的内容,并追加到默认输出之前

4  操作保持空间的命令

操作保持空间的命令如下所示:
h 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除
H 将pattern space中的内容append到hold space\n后
g 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除
G 将hold space中的内容append到pattern space\n后
x 交换模式空间和保持空间的内容

总结如下表:

名称

命令

说明

保存(Hold)

h/H

将模式空间的内容复制或者追加到保持空间

取回(Get)

g/G

将保持空间的内容复制或者追加到模式空间

交换(Exchange)

x

交换模式空间和保持空间的内容

(三)Sed命令执行流程

无论是将操作指令通过命令行指定,还是写入到文件中作为一个sed脚本,必须包含至少一个指令,否则用sed就没有意义了。一般会同时指定多个操作指令,这时候指令之间的顺序就显得非常重要。而你的脑海中必须有这么一个概念,即每个指令应用后,当前输入的行会变成什么样子。要做到这一点首先必须要了解sed的工作原理,要做到“知其然,且知其所以然”。

每条操作指令(instruction由pattern和procedure两部分组成,pattern一般是用'/'分隔的正则表达式,而procedure则是一连串编辑命令(action)。

sed的处理流程,简化后是这样的:

1 读入新的一行内容到缓存空间;

2 从指定的操作指令中取出第一条指令,判断是否匹配pattern;

3 如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;

4 如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;

5 当所有指令都应用之后,输出缓存行的内容;

6 回到第1步继续读入下一行内容;

如下图所示:

(四)Sed命令地址的选择

(一)‘ script ’ :分为地址和命令

地址定界:

1 不给地址:对全文进行处理

2 单地址:

num:指定的行

$ 最后一行,

/pattern/:被此处模式所能匹配的每一行

3地址范围:

num1,num2

num1,+num2

/pat1/,/pat2/

num,/pat1/

4 步进

1~2奇数行

2~2偶数行

PS: 如果地址后面有一个感叹号(!),则将编辑命令应用到不匹配该地址的所有行

Sed 流文本编辑器相关推荐

  1. Linux 命令之 sed -- 功能强大的流式文本编辑器

    文章目录 一.命令介绍 二.命令格式 三.常用选项 四.sed 子命令 五.sed 替换标记 六.sed 元字符集 七.命令示例 (一)用指定的字符串替换掉指定的字符串 (二)删除文档中的空白行 (三 ...

  2. 文本处理三剑客之 sed 流编辑器(基础部分)

    文本处理三剑客之 sed 流编辑器(基础部分) SED 即 Stream EDitor.和交互式编辑器如 vi 需要打开整个文件不同,sed 是行编辑器,每次处理一行,比较适合在脚本中进行无交互编辑, ...

  3. 【shell】shell脚本实战-sed流编辑器

    文章目录 sed的介绍 sed的执行过程 sed的用法 sed常用选项 实战案例 1. 将 passwd中root替换为zmgaosh 2. 按行查找替换 1)单行替换: 2)多行替换: 3)删除2- ...

  4. php 字符流在linux,PHP_linux正则表达式awk详解,awk和sed一样是流式编辑器,它 - phpStudy...

    linux正则表达式awk详解 awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行.awk比sed更加强大,它能做到sed能做到的,同样也能做到sed不能做到的.awk常用 ...

  5. Shell编程(三)grep sed awk文本处理三剑客

    上一章: Shell编程(二)_做测试的喵酱的博客-CSDN博客 一.ps命令 指令: ps 作用: 主要是查看服务器的进程信息 选项含义: -e:等价于 '-A' ,表示列出全部的进程 -f:显示全 ...

  6. Linux系统学习关于Vim文本编辑器的使用介绍

    Day04 cippus vim 文本编辑器 vi [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8jFPKIO1-1669517913499)(F:\桌面\src=h ...

  7. linux操作系统 第03章 vi文本编辑器

    第3章    vi文本编辑器 3.1  vi文本编辑器概述 与Unix相同,Linux本质上是一个文本驱动(text-driven)的操作系统.文本文件就是全部由ASCII码字符及某种语言的编码字符构 ...

  8. Linux sed --编辑文本

    awk于1977年出生,今年36岁本命年,sed比awk大2-3岁,awk就像林妹妹,sed就是宝玉哥哥了.所以林妹妹跳了个Topless,他的哥哥sed坐不住了,也一定要出来抖一抖. sed全名叫s ...

  9. 管道、重定向、vim文本编辑器

    管道.重定向.vim文本编辑器 重定向 1代表标准输出流 2代表错误输出流 0代表标准输入流 重定向什么流就在尖括号旁放对应的数字.>>不会覆盖 >会覆盖 [dennis@local ...

最新文章

  1. 演讲实录 | DevOps五大理念及其落地实践
  2. python 生成器与迭代器
  3. PJ Naughter's Freeware Library
  4. Hadoop集群(四) Hadoop升级
  5. google bookmarks的书签分类的技术
  6. Oracle学习 第26天 Toad试用感受
  7. java解三角函数方程_Java 中的三角函数
  8. 【概率笔记】条件概率这样学才快啦
  9. vim amp; emacs color Scheme
  10. T61 拆机4短报警 续
  11. 干货:react新手入门之react小书
  12. pytorch转onnx: step = 1 is currently not supported以及Exporting the operator silu to ONNX opset version
  13. 电脑桌面计算机文件打不开怎么办,电脑开机桌面文件都点不开的解决方法
  14. python非线性最小二乘拟合_非线性函数的最小二乘拟合——兼论Jupyter notebook中使用公式 [原创]...
  15. 为什么建议你来公司线下面试
  16. win10开始菜单打不开了,我屮艸芔茻
  17. windows正版验证问题。。。
  18. 大数据存储技术期末复习
  19. SourceInsight4.0自定义编译命令
  20. 设计模式:积分兑换系统的设计与实现

热门文章

  1. asp毕业设计——基于Delphi+udp+UDP的基于局域网的信息收发系统设计与实现(毕业论文+程序源码)——教务信息管理系统
  2. Tossing Bad Mupd Msg Pid In The Alert.Log
  3. java按照模板导出Excel工具类
  4. CentOS 8配置静态IP地址
  5. UFS-Net: A unified flame and smoke detection method for early detection of fire in video surveillanc
  6. css空心图形,css画空心箭头
  7. 交付管理——怎样管控项目成本
  8. 51单片机实验——按键外部中断实现四进制计数器
  9. CSR867X sink例程的VM工程属性编译选项简析
  10. springboot游泳池管理系统