sed 工具简介

        sed工具全称为流式编辑器,它可以被使用作为行过滤器(顾名思义sed是按照行查找进行操作的),它的工作原理可以描述为:把前一个程序的输出引入到sed的输入,经过一系列编辑命令转换为另外一种格式输出。(形象的解释如下图所示,模式空间会在后面单独提出)

以前学习到grep默认是在Basic模式下工作,这里的sed工具如grep一般,也是默认在Basic模式下工作,sed也支持正则表达式的使用,使用正则表达式是在"/"之间的模式。(当然这里的分隔符不是非"/"不可,也各可以自己定义)

1.^:行首定位符(如/^aa/匹配以aa开头的行)

2.$:行尾定位符(如/aa$/匹配以aa结尾的行)

3. .:匹配除换行符以外的单个字符(当然.. 就表示匹配两个字符了)

......(还有很多可以查看上一篇的grep的使用,有详细的介绍正则表达式的构成)

下面就以例子来介绍sed的使用。

1.语法:

sed编辑命令的基本格式为:/pattern/action/(其中pattern为正则表达式,action是使用的编辑操作)

这个操作可以比较形象的解释为:通过sed一行一行的读出待处理文件,如果某一行与pattern匹配,则执行相应的action,如果一条命令没有pattern而只用action,这个action将作用于待处理文件的每一行。

这个例子中的action为‘3p‘,所以执行后的结果就是讲第三行打印了出来。(如若不懂为何打出来很多条文本,请看步骤2 的介绍)

2.操作

/pattern/p:打印匹配pattern的行(这个命令会连同原文件的内容和处理结果一同输入到显示器上,若用户只想查看操作之后的结果,添加上-n选项即可。(例子如下)

很明显可以验证上面的原理。

sed  /pattern/a+新的字符串:在匹配到pattern后一行添加新的字符串

sed  /pattern/i+新的字符串:在匹配到pattern前一行添加新的字符串

sed  /pattern/d:删除匹配pattern的行(sed命令你会修改原文件,删除命令只表示某些行不打印输出,而不是从源文件中删除)

 sed  /pattern/s//:s为查找并替换命令

(1)/pattern/s/pattern1/pattern2/:查找符合pattern的行,将该行第一个匹配pattern1 的字符串替换为pattern2

(2)/pattern/s/pattern1/pattern2/g:查找符合pattern的行,将该行所有匹配pattern1
的字符串替换为pattern2

这个例子中的第一个操作就是将文本全部批量化注释(使用位置限定符^,匹配到所有行),而第二个操作则是匹配到printf行将所有已printf开头的注释掉。

第一个命令是匹配到该行是a的第一个字母,使用~a~替换它,第二个命令则是替换该行所有的a.第三个命令中的&符号作用是查找字符串,作用和~a~一样。

上面的例子则实现了在文本中插入空行,两种解决办法,(1)匹配行尾加以换行符

                                                                                               (2)匹配行首加以换行符

3.选项

-n:只显示出修改后的结果

-e:允许多项编辑

-i:允许修改原文件

使用sed工具来实现1到100的所有数的和

首先用seq工具生成1-100的序列,然后通过管道将数据传给sed工具进行操作(实现如下)

很明显,生成了100个序列,那么要计算所有数的和的话就先累加所有数,使用tr命令将换行符替换为+号

      但我们又发现最后一项多了一个符号,所以在利用管道传给计算器bc之前先将最后一项做处理,利用sed工具将最后一行的+替换为换行符即可,最终结果就如上图所示。

   在了解了sed工具的基本使用之后,现在来学习文章刚开始提到的模式空间(pattern space)。

 sed工作原理是将处理的行读入模式空间,每次执行sed命令后,将会把pattern space中的内容输出后清空。最后一条一条的进行相同步骤处理,直到文本执行完毕。(可以对照文章开头的图进行理解)

一般情况下,数据的流式处理只会使用模式空间,但是在实现某些特殊要求的时候会用到保持空间(hold space),换句话说,如果不显式的使用一些高级命令的话,保持空间一般都处在闲置状态。当然,这里可以将保持空间理解为一个仓库,用来暂存数据。下面就介绍一些高级命令。

+g:将保持空间的内容拷贝到模式空间中,原模式空间的内容被清除

+G:将保持空间中的内容追加到模式空间的内容之后

+h:将模式空间里的值拷贝到保持空间里,原保持空间里的内容被清除

+H:将模式空间里的内容追加到保持空间 的内容之后

+d:删除pattern中的所有行,并读入下一行到pattern中

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

以下为实践验证命令的例子:

(1)在文件aa中添加空行,这里我们使用+G命令,即将保持空间里的内容追加到模式空间的内容之后,在没有进行任何操作之前,我们可以默认保持空间中就是一个空行,这样一来,就等于是在模式空间的内容后面添加一个空行。

(2)倒着打印出aa文件里的所有行,一般使用的命令为tac,结果如下图第一部分所示,那使用sed命令怎么来实现呢?(思路如下图所示)

也就是第二部分使用的命令喽!

(3)打印匹配pattern的一行,主要思路:先逐行匹配到pattern,匹配到后将模式空间里的内容拷贝到保持空间里,最后匹配到行为的时候麻将先前拷贝到保持空间中的内容追加到模式空间中。

(4)实现1到100的总和,主要思路是:先将seq生成的序列通过管道传给sed工具,接下来,利用sed行匹配的的特性将模式空间中的内容追加到保持空间中,然后交换两个空间中的内容并用+替换换行符(这个时候我们可以看看效果)

还能明显1前面多了一个+,所以最后在添加命令去掉1前面的+部分(最终实现如下)。

时间: 2024-12-05 16:14:26

sed 工具简介的相关文章

正则表达式与grep、sed工具使用简介

正则表达式与grep.sed工具使用简介 一.正则表达式     正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 其介绍如下:      \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符 ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束位置 * 匹配前面的子表达式任意次 + 匹配前面的子表达式一次或多次(大于等于1次) ? 匹配前

shell脚本 sed工具练习

1. Sed简介           sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等.以下介绍的是Gnu版本的Sed 3.02.   2. 定址         

shell脚本--sed工具

sed sed:它叫做流式编辑器,它的工作场景一般是在编辑器中,把一段文本按行读入sed中然后按指定的方式输出,这是它最基本的用法. 一.sed的基本操作: 1./pattern/action pattern为正则表达式,对满足pattern的行作action操作 例如 这条命令和grep基本一样,其中-n的意思是只将执行后面指令的显示出来,如果不加-n选项则会把所有信息显示以便并且把匹配到的多显示一遍,p的意思是打印,如果改成d则是删除.-i的话则会修改源文件 2./pattern/s/pat

sed工具

grep工具的功能其实还不够强大,grep实现的只是查找功能,而它却不能实现把查找的内容替换掉.以前用vim的时候,可以查找也可以替换,但是只局限于在文本内部来操作,而不能输出到屏幕上.sed工具以及下面要讲的awk工具就能实现把替换的文本输出到屏幕上的功能了,而且还有其他更丰富的功能.sed和awk都是流式编辑器,是针对文档的行来操作的. 打印某行 sed -n 'n'p filename 单引号内的n是一个数字,表示第几行: [[email protected] ~]# sed -n '2'

JS内存泄漏 和Chrome 内存分析工具简介(摘)

原文地址:http://web.jobbole.com/88463/ JavaScript 中 4 种常见的内存泄露陷阱 原文:Sebastián Peyrott 译文:伯乐在线专栏作者 - ARIGATO 链接:http://web.jobbole.com/88463/ 点击 → 了解如何加入专栏作者 了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读

Linux:sed工具

1.什么是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处

pt-online-schema-change工具简介

1.工具简介 pt-online-schema-change是percona提供的一个mysql在线修改表结构的工具 2.使用场景 当需要修改线上数据库中某个表的表结构时,发现这个表的数据量比较大,如果使用alter table语句的话可能会阻塞较长的时间,那么可以考虑使用pt-online-schema-change在线修改表结构,而不用担心阻塞应用 3.工作原理 对于要修改表结构的表,pt-online-schema-change首先会创建一个该表的拷贝,这里只拷贝表结构而不涉及到数据,然后

htop,glances和dstat工具简介

htop,glances和dstat工具简介 简介:htop,glances以及dstat是三个性能检测工具 一.htop命令: 语法:htop [options] 如图,我们键入htop后就会出现这个界面 左上部分的1,2,3,4表示我的机器是四核的,显示他们的利用情况.还有内存和交换空间使用情况.中间大部分显示是进程的相关情况.右上部分显示当前的任务数,有多少是在运行,以及负载使用情况. 1.交互式命令(直接在终端输入htop后,进入交互式界面,以下的选项都是指按键操作): (1)u: 过滤

rman备份工具简介

RMAN工具简介: 备份的文件: 数据文件 归档日志 控制文件(当前控制文件) spfile 自动管理备份相关元数据 文件名称 完成备份的scn 以数据块为单位,只备份使用过的数据块(物理层面判断是否使用) 备份时查询块状态,备份瞬间有修改块 等待块使用完成再备份 因此不会出现块分离 对备份出来的文件进行压缩 自身压缩+支持压缩参数 加参数压缩 5:1 自动检测数据块是否损坏 块损坏,不对其备份 支持增量备份 使用rman前提条件: 正确的环境变量 正确的实例名 sys用户操作(推荐) 监听不支