分类

linux sed 命令解释参数与处理教程

浏览量:283 日期:2014-09-15 15:24:26
内容介绍

  sed命令的功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大,sed全称是:Stream EDitor.

  sed命令

  流程: 从标准输入或文件中读入,一行一行读,读完以后处理,处理完一行后继续读下一行。

  sed有两个空间,相当于缓冲,一个是pattern space,一个是hold space,pattern space是一个临时缓冲区,每次读入新行都会覆盖掉里面的内容;hold space相当于一个永久缓冲区,处理结束到读入下一行这期间内容不会被清除。但是处理流程可能会对两个缓冲区的内容造成影响。

  几个参数:

  d:清除pattern space的内容;

  x:交换pattern space和hold space的内容;

  g: 将hold space 的内容拷贝并覆盖到pattern space中,hold space自身保持不变;

  G: 将hold space 的内容拷贝并追加到pattern space中,hold space自身保持不变;

  h:将pattern space 的内容拷贝并覆盖到hold space中,pattern space自身保持不变;

  H:将pattern space 的内容拷贝并追加到hold space中,pattern space自身保持不变;

  具体处理流程:

  读入一行,去掉行尾的换行符后插入到pattern space中,处理,处理结束后输出pattern space的内容,再输出一个换行符。hold space在初始化的时候就含有一个换行符。为了方便理解,我们可以将换行符标记为/n。下面结合具体的实例来介绍sed的处理过程:

  以text.txt做实验,内容如下(三行,分别为one,two和three):

  $ cat test.txtonetwothree

  命令: sed "H;g" test.txt

  处理过程如下:

  ①读入第一行,并插入pattern space,此时两个缓冲区内容如下:

  pattern space hold space------------- ---------------one /n <---hold space原来就有一个空行

  执行命令H(将pattern space 内容追加到hold space ),此时两个缓冲内容:

  pattern space hold space------------- ---------------one /n one

  执行命令g(将hold space内容拷贝到pattern space中):

  pattern space hold space------------- ---------------/n /none one

  执行完毕,输出pattern space的内容:

  <--空行one <---输出one后,sed会输出一个回车(不是空行),下次输出在one的下一行

  ② 处理完毕,读入第二行,并插入到pattern space中,此时(注意hold space的内容不会自动清除):

  pattern space hold space------------- ---------------two /n one

  执行命令H(将pattern space 内容追加到hold space ),此时两个缓冲内容:

  pattern space hold space------------- ---------------two /n one two

  执行命令g后缓冲内容:

  pattern space hold space------------- ---------------/n /none onetwo two

  执行完毕,输出pattern space的内容:

  <--空行onetwo

  到目前为止,屏幕的总的输出是:

  <--空行one <--空行onetwo

  ③ 读入第三行后:

  pattern space hold space------------- ---------------three /n one two

  执行命令H后:

  pattern space hold space------------- ---------------three /n one two three

  执行命令g后:

  pattern space hold space------------- ---------------/n /none onetwo twothree three

  处理结束输出pattern space的内容:

  /n <--空行onetwothree

  整个命令处理完后,屏幕的输出是:

  $ sed 'H;g' test.txt/n <--空行one/n <--空行onetwo/n <--空行onetwothree$ <---这是linux命令提示符

相关阅读
手机版 | 电脑版
Copyright @ 2021 豆豆系统