首页
登录 | 注册

Sed命令的工作原理

 Sed工作原理
 
sed是一个非交互式的流编辑器。所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出;而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令),接着读入下一行。整个文件像流水一样被逐行处理然后逐行输出。
 
下面我们看一下sed的工作过程。
 
sed不是在原输入上直接进行处理的,而是先将读入的行放到缓冲区中,对缓冲区里的内容进行处理,处理完毕后也不会写回原文件(除非用shell的输出重定向来保存结果),而是直接输出到屏幕上。sed运行过程中维护着两个缓冲区,一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“暂存缓冲区(holding space)”。一般情况下,每当运行sedsed首先把第一行装入模式空间,进行处理后输出到屏幕,然后将第二行装入模式空间替换掉模式空间里原来的内容,然后进行处理,以此类推。
 
一般情况下暂存缓冲区是用不到的,但有特殊的命令可以在模式空间与暂存缓冲区之间交换数据,后文将有介绍。由于sed对文本的所有操作都是在缓冲区里进行的,所以不会对原文件造成任何破坏。
 
4.2            Sed命令格式
 
sed的命令格式如下:
 
sed [-Options] [‘Commands’] filename
 
其中,Command是一个sed命令,sed命令一定要被包含在一对单引号中,以免被shell解释,其格式如下:
 
[address-range][sed-command]
[Pattern-to-match][sed-command]
 
address-range是指要处理的行的范围,又叫地址范围;pattern-to-match是一个要匹配的模式,是一个正则表达式,sed-command是一个sed命令,用来对指定的行进行处理。下面是一个简单的例子:
 
sed –n ‘1,3p’ students
 
这个命令将文件students中的第13行打印到屏幕。注意,地址范围和sed命令之间没有空格,如果加入空格,sed也会将其忽略。参数-n用来取消默认输出。默认情况下,sed每读入一行到模式空间,无论是否对其进行处理,在读入下一行之前多要将模式空间中的内容输出到屏幕上。参数-n可以用来取消这种默认的输出,只有当用户用命令p时才将指定的行输出到屏幕。如果没有用参数-n而又对指定行执行了p命令,那么这些行将会被打印两次。
 
地址范围可以是一个数字,这个数字代表了一个行号;也可以是一个用逗号分隔的两个数字表示的范围(包括这两行)。范围可以是数字,正则表达式,或是两者的组合。
 
pattern-to-match是一个要匹配的模式,sed将会对所有匹配的行执行sed-command。其实,这里的pattern-to-match也可以看作是一个地址,这个地址是所有与指定模式匹配的行的行号。因此sed的格式可以归纳为一种:
 
sed [-Options] ‘[address-range][sed-command]’ filenam

相关文章

  • 华为Easy IP和NAT Server实现原理
    本文继续介绍华为另两种NAT实现方式的工作原理. 6.1.3 Easy IP实现原理 Easy IP方式的实现原理与上节介绍的地址池NAPT转换原理类似,可以算是NAPT的一种特例,不同的是Easy IP方式可以实现自动根据路由器上WAN接 ...
  • 华为Basic NAT和NAPT实现原理
    NAT是路由器的一项非常重要,且应用非常广泛的技术,但许多读者对NAT的各种实现方式的工作功能原理一直没有搞清楚,其实很简单.本篇先介绍两种NAT实现方式的工作原理,下篇再介绍另两种实现方式的工作原理. 6.1.2 Basic NAT实现原 ...
  • OpenvSwitch完全使用手册
    OpenvSwitch完全使用手册(一)-总览Overview 本文主要参考Overview of functionality and components以及Frequently Asked Questions以及结合自己的理解. 1 什 ...
  • 前几天终于从出版社拿到样书了,我当年对论坛上版友的承诺也终于要兑现了.曾经说过,要写一本Sybase ASE的书.因为Sybase的图书实在太少了.  购买地址: http://book.jd.com/11228378.html (京东) ...
  • 老薛带你学习Linux Shell脚本编程
    参考案例: 需求:编写一个Centos6.7操作系统初始化配置的脚本 第一步:需求拆分 1)基础环境是Centos6.7 2)系统初始化配置,整理经常用到的初始化配置操作    #关闭selinux    #关闭防火墙    #改机器名   ...
  • 近期有一种声音,就是"学习要碎片化",主要考虑是现在人们的工作和生活节奏加快,很难有比较长的时间段来专门进行学习.为此有人高呼,将来图书会碎片化,视频课程也会碎片化,认为这样就可以充分利用吃饭前的几分钟,睡觉前的十几分钟 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.014 s.
京ICP备10005923号