点击返回 自学Linux命令行与Shell脚本之路

18.1-sed编辑器基础特性

linux世界中最广泛使用的两个命令行编辑器:

  • sed
  • gawk

1. sed概念

sed是stream editor的简称,也就是流编辑器。sed 是一种在线编辑器,它一次处理一行内容。sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。

sed编辑器会执行以下操作:

  1. 一次从输入中读取一行数据。
  2. 根据所提供的编辑器命令匹配数据。
  3. 按照命令修改流中的数据。
  4. 将新的数据输出到STDOUT。

          在流编辑器将所有命令和一行数据匹配完毕后,它会读取下一行数据重复这个过程。

解析:

首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。

2. sed命令格式

 sed OPTIONS... <SCRIPT> [INPUTFILE...]
  • -n 使用安静(silent)模式(想不通为什么不是-s)。在一般sed的用法中,所有来自stdin的内容一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来;
  • -e 直接在指令列模式上进行 sed 的动作编辑;
  • -f 直接将 sed 的动作写在一个文件内, -f filename 则可以执行filename内的sed命令;
  • -r 让sed命令支持扩展的正则表达式(默认是基础正则表达式);
  • -i 直接修改读取的文件内容,而不是由屏幕输出。

2.1 在命令行定义sed编辑器命令

sed中y命令与s命令的区别

  • y一般是行级别的替换,s一般是列级别替换(当然也可以转换成行级)
  • s替换的是整体,y替换的是每一字母对应的单个字母, 会用斜线间的第二个文本字符串来替换第一个文本字符串

2.2 在命令行使用多个sed编辑器命令

  • 在命令行使用多个sed编辑器命令,就需要使用 -e 选项
  • 同时使用多个编辑命令,命令之间要用;隔开(!除外),并且在命令末尾和分号之前不能有空格
  • 也可以使用次提示符来分割命令

2.3 在文件中读取sed编辑器命令

在sed命令中用 -f 选项来制定文件。这种情况下,不用在每条命令后面放一个分号。

3. sed编辑器基础

3.1 更多的替换选项

S命令:行中替换文本,替换的是整体,默认情况下只替换没行中出现的第一处

   s/原文本/新文本/标记位 ,   标记为如下:

  •   p  :显示替换成功的行    
  •   g  :全局替换
  •   w  filename : 将替换成功的结果保存至指定文件中
  • 数字: 标明新文本将替换第几处模式匹配的地方

3.2  使用地址

如果只想将命令作用在特定行货某些行,就必须使用 行寻址 。

在sed编辑器中有两种形式的行寻址:

  • 以数字形式表示行区间
  • 用文本模式来过滤行

指定的格式一:

 [address] command

指定的格式二(多个命令组):

 address] {
command1
command2
command3
....
}

3.2.1 数字方式的行寻址

使用数字方式的行寻址,可以用行的文本流中的行位置来引用。

  • 在命令中指定的地址可以使单个行号,或是用起始行号、逗号以及结尾行号指定的一个区间范围内的行
  • 可以使用行地址区间
  • 可以使用 $ 符号,将命令作用到文本中从某行开始的所有行。

3.2.2  使用文本模式过滤器

格式:  /pattern/command

  • 必须使用/将要指定的pattern封起来
  • 会将该命令作用到包含指定文本模式的行上。

3.2.3   命令组合

  • 如果需要在单行上执行多条命令,可以使用花括号将多条命令组合在一起
  • 也可以在一组命令前指定一个地址区间

3.3  删除行 d命令

之前讲的都是替换命令s , 其实还有很多其他命令。

删除命令d ,会删除匹配指定寻址模式的所有行。

  • 若没有添加寻址模式,所有文本行都会被删除
  • 通过行号指定或区间指定或特殊符号&,可以删除特定的文本行
  • sed编辑器的模式匹配也适用于删除命令
  • 重点: 没有删除原文本

3.4  插入和附件文本

  • 插入命令 i 会在指定行前增加一个新行, 文本会出现在数据流文本的前面。
  • 附加命令 a 会在指定行后增加一个新行, 文本会出现在数据流文本的后面。  
  • 他们不能再单个命令行上使用,必须指定是要将行插入还是附加到另一行
  • 通过行号指定或区间指定或特殊符号&,可以插入或附加特定的文本行
  • $a\ 可以直接附件在文本最后一行
  • 要插入或附加多行文本,必须要插入或附加的新文本的每一行使用反斜线
  • sed编辑器的模式匹配也适用

格式 :

 sed  '[address] command\
new line '

3.5 修改行

  • 修改行命令 c 修改数据流中整行文本的内容
  • 他们不能再单个命令行上使用,必须指定是要将行插入还是附加到另一行
  • 在使用行号区间指定时,需要注意是用这一行文本替换数据流中的两行文本,而不是逐一修改这两行文本。
  • sed编辑器的模式匹配也适用

3.6 转换行

转换命令 y 是唯一可以处理单个字符的sed编辑器命令。

格式:

 [address]y/inchars/outchars/
  • inchars和outchars 值一对一映射
  • inchars中的第一字符会被转换成outchars的第一字符;inchars中的第二字符会被转换成outchars的第二字符;以此列推
  • 如果inchars 和outchars的字符长度不符,就会报错
  • y命令不是所有系统的sed编辑器都存在的

3.7 打印数据流中的信息

  • p命令用来打印文本行, 一般与sed -n 组合使用
  • = 命令用来打印行号
  • l 命令用来列出行

3.8 使用sed处理文件

  •  w 命令用来向文件写入行。
  •  r 命令允许将一个独立文件中的数据插入到数据流中

自学Linux Shell18.1-sed编辑器基础特性的更多相关文章

  1. 自学Linux Shell18.2-sed编辑器高级特性

    点击返回 自学Linux命令行与Shell脚本之路 18.2-sed编辑器高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. sed小结 命令格式: 1 sed [opt ...

  2. 自学Linux Shell10.1-使用编辑器vim

    点击返回 自学Linux命令行与Shell脚本之路 10.1-使用编辑器vim 所有的 Unix系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在.但是目前我们使用比较多的是 vim 编辑 ...

  3. 自学Linux Shell18.3-sed实用工具

    点击返回 自学Linux命令行与Shell脚本之路 18.3-sed实用工具 1. 加倍行间距 命令格式: .......

  4. sed编辑器基础

    一. 更多的替换选项 ①替换标记 root@localhost sed]# cat data4.txt This is a test of the test script. This is the s ...

  5. Linux上bash的部分基础特性:

    命令补全: tab shell程序在接收到用户执行命令的请求,分析完成后,最左侧的字符串会被当做命令 命令查找机制: 查找内部命令: 根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名 ...

  6. 自学Linux命令行与Shell脚本之路

    自学Linux命令行与Shell脚本之路[第一回]:初识Linux   1.1 自学Linux Shell1.1-Linux初识 1.2 自学Linux Shell1.2-Linux目录结构 1.3  ...

  7. shell编程之sed编辑器&gawk程序

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/560372 s ...

  8. 自学Linux Shell19.1-gawk程序基础特性

    点击返回 自学Linux命令行与Shell脚本之路 19.1-gawk程序基础特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. gawk概念 awk是一个强大的文本分析工具 ...

  9. 自学Linux Shell19.2-gawk程序高级特性

    点击返回 自学Linux命令行与Shell脚本之路 19.2-gawk程序高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. gawk使用变量 编程语言共有的特性是使用变 ...

随机推荐

  1. Luogu4652 CEOI2017 One-Way Streets 树上差分

    传送门 题意:给出$N$个点.$M$条无向边的图,现在你需要给它定向,并满足$Q$个条件:每个条件形如$(x_i,y_i)$,表示定向之后需要存在路径从$x_i$走向$y_i$.问每条边是否都有唯一定 ...

  2. vue-用Vue-cli从零开始搭建一个Vue项目

    Vue是近两年来比较火的一个前端框架(渐进式框架吧). Vue两大核心思想:组件化和数据驱动.组件化就是将一个整体合理拆分为一个一个小块(组件),组件可重复使用:数据驱动是前端的未来发展方向,释放了对 ...

  3. 查看CentOS/Linux的版本信息

    今天在安装MySql的时候,想选择linux的版本对应的MySql. 1.查看内核版本和x86/x64版本 方法一.cat /proc/version [root@sxl129 Desktop]# c ...

  4. Nginx+upstream针对后端服务器容错的运维笔记

    熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一.nginx的upstream容错 1)nginx 判断节点失效 ...

  5. mariadb第二章-增删改

    MariaDB 数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行, 尽量使用范围小的,而不用大的 常用的数据类型 整数:int, bit 小数:de ...

  6. 用软件工程分析开源项目octave的移植

    在本科的时候学习了软件工程,报考了信息系统项目管理师的考试,,虽然没有过,但是其实还是学了一些相关项目管理方面的知识,,9大管理,,当年应该能背出来,,, 1 项目整体管理 2 项目范围管理 3 项目 ...

  7. <构建之法>第三10、11、12章

    第十章 典型用户和场景 问题:如何更准确知道用户的需求是什么,设计出满足用户的软件? 第十一章 软件设计与实现 问题:软件设计过程中,如何管理设计变更? 第十二章 用户体验 问题:在何时开始设计用户体 ...

  8. ECharts设置y轴显示

    参考地址:https://www.w3cschool.cn/echarts_tutorial/echarts_tutorial-no3h2cul.html yAxis: { type: 'value' ...

  9. [2017BUAA软工]第0次博客作业

    第一部分:结缘计算机 1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 当初选择计算机专业作为自己报考大学的第一志愿,主要是看重了市场对于计算机行业人士的巨大需求,同时也感慨于计算机行 ...

  10. 自定义组件的 v-model

    Vue.component('base-checkbox', { model: { prop: 'checked', event: 'change' }, props: { checked: Bool ...