sed 的概念及相关例子

一、sed的概念:

sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是 把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出。 sed和vi都源于 早期UNIX的ed具,所以很多sed命令和vi的末行命令是相同的。
sed命令行的基本格式为:
sed option ‘script‘ file1 file2 ...
sed option -f scriptfile file1 file2 ...
sed处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,命令行参数可以一次传入多个文件,sed会依次处理。 sed的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件然后用-f参数指定,编辑命令的格式为
/pattern/action
其中pattern是正则表达式,action是编辑操作。 sed程序一行一行读出待处理文件,如果某一行与pattern匹配,则执相应的action,如果一条命令没有pattern只有action,这个action将作用于待处理文件的每一行。
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除你使用重定向存储输出。sed主要用来自动编辑一个或多个文件:简化对文件的反复操作。

二、命令和选项

sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的输入行。

命令

a\ : 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行

c\ :用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用”\"续行

i\ :在当前行之前插入文本。多行时除最后一行外,每行末尾需用”\"续行d删除行

h : 把模式空间的内容复制到暂存缓冲区

H : 把模式空间的内容追加到暂存缓冲区

g : 把暂存缓冲区的内容复制到模式空间,覆盖原有的内容

G: 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面

l : 列出非打印字符

p : 打印行

n : 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理

q : 结束或退出sed

r : 从文件中读取输入行

! : 对所选行以外的所有行应用命令

s : 用一个字符串替换另一个

g : 在行内进行全局替换

w : 将所选的行写入文件

x : 交换暂存缓冲区与模式空间的内容

y : 将字符替换为另一字符(不能对正则表达式使用y命令)

选项

-e : 进多项编辑,即对输入行应用多条sed命令时使用

-n : 取消默认的输出

-f :指定sed脚本的文件名

8. 退出状态

sed不像grep样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时, sed的退出状态才不是0。

sed在正常情况下,将处理的行读入模式空间( pattern space),脚本中的“sedcommand( sed命令) ”就一条接着一条进行处理,直到脚本执完毕。然后该行被输出,模式( pattern space)被清空;接着,再重复执刚才的动作,件中的新的一行被读入,直到文件处理完毕。

一般情况下,数据的处理只使用模式空间( pattern space),按照如上的逻辑即可完成主要任务。但是某些时候,使用通过使用保持空间( hold space),还可以带来意想不到的效果。
模式空间:可以想成工程里面的流水线,数据之间在它上面进行处理。
保持空间:可以想象成仓库,我们在进行数据处理的时候,作为数据的暂存区域。
正常情况下,如果不显示使用某些高级命令,保持空间不会使用到!
sed命令:
+ g: [address[,address]]g 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除
+ G: [address[,address]]G 将hold space中的内容append到pattern
space\n后
+ h: [address[,address]]h 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除
+ H: [address[,address]]H 将pattern space中的内容append到holdspace\n后
+ d: [address[,address]]d 删除pattern中的所有行,并读入下一新行到pattern中
+ D: [address[,address]]D 删除multiline pattern中的第一行,不读入下一行
+ x 交换保持空间和模式空间的内容
有如下例子:
1. 给每行结尾添加空行

2. sed模拟出tac的功能(倒序输出)

1!G第1不执“G”命令,从第2行开始执。 $!d,最后一行不删除(保留最后1行)
3. 追加匹配行到文件结尾

4.行列转化

H表把pattern space 的内容追加到hold space中去, H可以带一个地址,这里用的是$,表到文件的末尾,然后用x将之取到pattern space中,把\n替换成空格再打印即可。
5.求1-100的和

6. 打印奇偶数行

7.再求1-100的和

:a表标签a, ba表跳转到a标签, $表最后一行,!表示不做后续操作,所以, $!ba表示最后一行不跳转到a标签,结束此次操作。

时间: 2024-08-08 05:35:51

sed 的概念及相关例子的相关文章

微服务架构下的数据一致性:概念及相关模式

主页:http://www.howardliu.cn/ 博客:微服务架构下的数据一致性:概念及相关模式 从2014年开始,微服务逐渐进入大家的实现,被认为是下一代实现信息化的有效手段.设计到系统,其中绕不开的就是数据一致性,从本地事务,到后来的分布式事务,都能够有效的保证数据一致性.但是在微服务架构中,这两种方式都不是最好的选择. 1. 使用本地事务和分布式事务保证一致性 在传统的单击应用中,最简单.最直接.最普遍的会使用一个关系型数据库,通过关系型数据库的事务保证数据的一致性.这种事务有四个基

迁移学习全面概述:从基本概念到相关研究

目录: 1.什么是迁移学习? 2.为什么现在需要迁移学习? 3.迁移学习的定义 4.迁移学习的场景 5.迁移学习的应用 从模拟中学习 适应到新的域 跨语言迁移知识 6.迁移学习的方法 使用预训练的 CNN 特征 学习域不变的表征 让表征更加相似 混淆域 7.相关的研究领域 半监督学习 更有效地使用可用的数据 提高模型的泛化能力 让模型更加稳健 多任务学习 持续学习 zero-shot 学习 8.总结 ------------------------------------------------

Linux终端概念及相关命令

Linux中终端的概念: 在使用Linux操作系统的过程中,我们可以通过终端(terminal)来输入命令和接收信息,用户如果想与计算机进行交互,就会使用到终端,所以说,显示器和键盘就是一种终端,我们接收显示器输出的信息,通过键盘向电脑输入信息,显示器和键盘是真实存在的物理设备,我们可以称之为物理终端. 刚才提到物理终端,除了物理终端,还有虚拟终端.图形终端.模拟终端等终端类型. 虚拟终端:虚拟终端是基于物理终端之上,以软件的方式虚拟实现的终端,虚拟终端称之为tty,我们可以在同一个物理终端上虚

RabbitMQ 概念与Java例子

RabbitMQ简介目前RabbitMQ是AMQP 0-9-1(高级消息队列协议)的一个实现,使用Erlang语言编写,利用了Erlang的分布式特性.概念介绍:Broker:简单来说就是消息队列服务器实体.Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列.Queue:消息队列载体,每个消息都会被投入到一个或多个队列.Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来.Routing Key:路由关键字,exchange根据这个关键字进行消息投

照明概念及相关术语

主要概念 1.1 光通量 Luminous Flux 单位时间内辐射能量的大小.单位:流明 lm.公式如下: 这个公式较直观,在波长380nm~780nm内做光视效率(η/nm)乘上光谱辐射通量(W/nm)的积分(也就是视觉通量的积分),最后再乘上最大光谱效能(把W约掉),就得到了光通量lm. 最大光谱效能=683lm/W(波长=555nm) 1.2 发光强度 Luminous Intensity 单位:坎德拉 cd. * cd:candle-power 1.3 照度 Illuminance 用

Linux学习第四节课-文件管理基本概念及相关部分指令

Linux学习第四节课 --------------------------------------------------------------------------------------------------------------------------------------------------------------------- 十九.文件管理基本概念 文件和目录被组织成一个单根倒置树结构: 文件系统从根目录开始,用/表示: 根文件系统(rootfs):root file

栈和队列数据结构的基本概念及其相关的Python实现

先来回顾一下栈和队列的基本概念: 相同点:从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同. 不同点:栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表. 队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表.它们是完全不同的数据类型.除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定". 栈必须按"后进先出"的规则进行操作:比如说,小学老师批改学生的作业,如果不打乱作业本的顺

新概念英语相关资料

新概念英语1-4册 学生用书&教师用书PDF+TXT文本 链接:http://pan.baidu.com/s/1gfaIPfd 密码: usuu 新概念英语1-4册 有声电子书MP3 链接:http://pan.baidu.com/s/1eSP5L9g密码:s56i 有热心的站友分享了新概念英语1-4册的MP3&讲解视频 链接:http://pan.baidu.com/s/1hsrBO6g

循环与函数及相关例子

下面写的是case分支选择结构.while循环.until循环.循环控制语句(continue.break).函数(定义.使用.返回值.实参.递归调用) 一些基本知识点如下: bash -n 用来判断有无语法错误 =~ 用来判断前后是否匹配 # bash -x little.sh 显示运行的具体过程及其输出结果 取得文件大小的两种方式: # wc -c < /usr/local/test # stat -c %s /usr/local/test 一.case分支选择结构 1.case格式: ca