sed 输入源读行命令 N

我们前面说过,sed 是行文字处理器。

之所以这么说,是因为默认情况下,sed 只会从输入源中读取一行然后处理一行。

其实,sed 是可以处理多行的。 sed 提供了单字母命令 N 从输入源中读取多行然后追加到 模式缓冲区中。

注意: 读取多行的命令是大写字母 N

读取多行命令 N 与读取单行命令 n 是不同的,不同之处在于

N 命令不会输出和清空缓冲区,仅仅是从输入源中读取行然后以新行的方式追加到模式缓冲区

也就是说,N 命令会现在模式缓冲区后面追加 换行符 \n 然后把读取的内容追加在换行符后面。

N 命令的语法格式如下

[address1[,address2]]N

address1address2行寻址 的开始行和结束行

范例

开始范例前,我们先准备下数据文件,假设当前目录下存在文件 data.txt 内容如下

1) 小明,23岁,北京大学
2) 小红,22岁,清华大学
3) 小李,25岁,斯坦福大学
4) 小王,22岁,清华大学
5) 小刚,27岁,北京大学
6) 小英,21岁,哈佛大学

下面的命令把相邻的两行放在同一行并使用 #~# 分隔

[www.twle.cn]$ sed 'N; s/\n/ #~# /g' data.txt

运行结果如下

1) 小明,23岁,北京大学 #~# 2) 小红,22岁,清华大学
3) 小李,25岁,斯坦福大学 #~# 4) 小王,22岁,清华大学
5) 小刚,27岁,北京大学 #~# 6) 小英,21岁,哈佛大学

是不是很神奇?

需要我解释下运行流程嘛?

  1. 程序开始执行时默认从输入源中读取一行放到 模式缓冲区

    因此模式缓冲区里的数据为

    1) 小明,23岁,北京大学
    
  2. 当遇到 N 命令,会再从输入源中读取一样然后以新行的方式追加到模式缓冲区里

    此时模式缓冲区里的数据为

    1) 小明,23岁,北京大学
    2) 小红,22岁,清华大学
    
  3. 第二条命令替换,把换行符替换为 #~#。替换之后模式缓冲区里的数据为

    1) 小明,23岁,北京大学 #~# 2) 小红,22岁,清华大学
    

接下来的事情你就知道了,哈哈

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.