Unix sed流编辑器简介 带你入门sed

已经看了一段时间的Linux Shell编程了,也能完成一些基本的使用,为了加深理解,恰好看到了The Unix School的一个sed&awk教程,不是简单的命令参数堆积,而是一个相当实用的系列,因此,希望能在几天内完成翻译.翻译过程不会逐字翻译,会穿插一些注释,包括自己的一些理解和其他的一些引用,作为开篇,简单说一下sed的工作机制,对后面的理解会有很大帮助。

sed是什么:

sed是一个非交互式的流编辑器(stream editor)。所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出;而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令),接着读入下一行。整个文件像流水一样被逐行处理然后逐行输出。(via Walk in Mindfields )

sed工作机制:

sed维护两个缓冲区,pattern space和hold space,命令开始执行之前都为空。

pattern space缓冲区用于临时保存每次读取的一行的内容,大部分的匹配和替换等等操作都是针对pattern space中的内容进行的,因此不会对输入文件有任何影响,而hold space则作为后备缓冲区使用,除非指定了一些特殊的命令(例如D删除命令),否则pattern space中的内容会在处理完一行之后清空,但hold space中的内容在处理完每一行时不会被删除。

也就是说pattern space相当于我们的内存,hold space相当于硬盘.处理的时候在内存里,处理过的就放回硬盘.(这是我的理解,有一点点不恰当,但是因此一些概念会比较好理解.)

具体来说,可以大致分为以下几步:

1.首先,从标准输入流读取一行,移除换行符,然后存入pattern space中

2.执行指定的命令,(每个命令都有一个可选的地址(可以是行号,也可能是一个正则表达式匹配),这个地址作为一个执行命令前的测试,指定了需要对那些行进行操作。当前行只有匹配的情况下才会执行命令。)

3.当指定所有的命令都执行完了之后,pattern space内容就被处理过了,sed默认会将pattern space中的内容打印到标准输出中,移除的换行符也会打印出来。本行操作完成。

4.然后sed会读取下一行的内容,再次执行相同的操作。直到行尾。

基本上最基础的理论就差不多了.主要是这个工作机制比较重要.后面从示例中慢慢加深理解.

时间: 2024-09-20 03:50:17

Unix sed流编辑器简介 带你入门sed的相关文章

SED单行脚本快速参考中文版(Unix 流编辑器)_linux shell

英文标题:USEFUL ONE-LINE SCRIPTS FOR SED (Unix stream editor) 原标题:HANDY ONE-LINERS FOR SED (Unix stream editor) 整理:Eric Pement - 电邮:pemente[at]northpark[dot]edu 版本5.5 译者:Joe Hong - 电邮:hq00e[at]126[dot]com 在以下地址可找到本文档的最新(英文)版本: http://sed.sourceforge.net/

SED单行脚本快速参考(流编辑器)第1/2页_linux shell

sed (stream editor) 功能说明:利用script来处理文本文件.语法:sed [-hnV][-e<script>][-f<script文件>][文本文件]补充说明:sed可依照script的指令,来处理.编辑文本文件.参数:-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件.-f<script文件>或--file=<script文件> 以选项中指定的scr

手把手带你入门IOS 8人机界面设计

  在去年,Apple针对新时代用户彻底更新了其设计语言.现在的设计语言相对之前大为简化,能够让设计师将精力集中到动画和功能上,而不是繁复的视觉细节上. 很多人都曾问过我:设计应当如何入门?成为一名优秀设计师有没有捷径可走?要我说,虽然没有捷径,但确实有几个适用于iOS的设计技巧和规则能够从全局角度改变你的设计方式. 当然,即便你目前的设计目标是完全不同于iOS的平台,相互之间的设计理念也是相通的,你可以将在web和印刷领域学习到的技巧运用到iOS设计中去.iOS 8是一个让设计寻回根源的平台,

Unix文件与目录简介

本文主要简单介绍Unix文件与目录 文件系统 Unix文件系统是目录和文件的一种层次结构,所有东西的起点是称为根的目录,此目录的名称是一个字符"/" 文件名 创建新目录时会自动创建了两个文件名:.(点)和..(点点),点指向当前目录,点点指向父目录 路径名 由斜线分隔的一个或多个文件名组成的序列构成路径名,以斜线开头的路径名成为绝对路径名,否则称为相对路径名 举个例子: 实现列举一个目录中所有的文件的名字(ls命令的简要实现) #include<dirent.h> #inc

增强学习小白?本文带你入门了解增强学习

更多深度文章,请关注:https://yq.aliyun.com/cloud 机器学习算法,特别是神经网络被认为是新的AI革命的起因. 在这篇文章中,我将介绍增强学习的概念,不过技术细节有限,只能使具有不同背景的读者能够理解该技术的本质.功能和局限性. 在本文末尾,我将提供一些实现RL的资源链接. 什么是增强学习? 从广义上讲,数据驱动算法可以分为三类:监督式.非监督式和增强学习. 前两个通常用于执行诸如图像分类.检测等任务,虽然它们的精确度是显著的,但这些任务不同于我们所期望的"智能"

Coinbase 联合创始人 Fred Enrsam 带你入门

摘要: 借花献佛,这是 Fred EnrsamCoinbase 联合创始人关于 什么是比特币 的10分钟演讲,拿来作入门挺好,需要一定的英文听力能力,Enjoy~ 借花献佛,这是 Fred Enrsam--Coinbase 联合创始人关于什么是比特币的10分钟演讲,拿来作入门挺好,需要一定的英文听力能力,Enjoy~

UNIX系统管理:系统管理简介

完成这一章,你能够做以下事情: 明确系统管理员的责任 1.1 系统管理员的角色 系统管理员的职责就是设置和维护系统.系统管理员不仅必须了解硬件和软件,而且必须了解用户组的需求. 由于与这些职责相关的命令不是让每个人都可以使用的,系统管理员需要对系统有特殊的权限,这种权限就叫做超级用户或者叫root存取. 1.2 硬件方面的职责 硬件的职责 建立并且维护系统硬件 检验并正确安装外部设备并且对其进行测试. 监控硬件的性能. 在硬件设备出现故障的时候安排进行修复 系统管理员的职责中有配置和管理系统硬件

ubuntu桌面版8.04带你入门之二:常用软件

从这里开始介绍UBUNTU里的一些软件. 38. OPEN OFFICE是外国开源的http://www.aliyun.com/zixun/aggregation/17181.html">办公软件,与微软的OFFICE几乎一样,不过OOo是免费的.但要熟悉OOo估计要一些时间.有人也许会说WPS个人版.但WPS个人版目前好像没LINUX版的.OOo有WINDOWS及LINUX版. OOo支持保存为XLS格式.OOo还有对应WORD,PPT的程序.不过WPS个人版支持打开OFFICE2007

Oozie简介与快速入门

Oozie是一个基于工作流引擎的开源框架,是由Cloudera公司贡献给Apache的,它能够提供对Hadoop MapReduce和Pig Jobs的任务调度与协调.Oozie需要部署到Java Servlet容器中运行. Oozie工作流定义,同JBoss jBPM提供的jPDL一样,也提供了类似的流程定义语言hPDL,通过XML文件格式来实现流程的定义.对于工作流系统,一般都会有很多不同功能的节点,比如分支.并发.汇合等等,Oozie也有类似的一些概念,不做过多解释,更多信息可以参考相关文