七.sed多行模式和循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了七.sed多行模式和循环相关的知识,希望对你有一定的参考价值。

sed默认每次执行一行数据,除非使用H,G或者N等命令创建多行模式,每行之间用换行符分开。

 

1.读取下一行数据并附加到模式空间 N

命令N从输入文件中读取下一行并追加到模式空间,而不是替换模式空间。

小写命令n打印当前模式空间的内容,并清空模式空间,从输入文件中读取下一行到模式空间,然后继续执行后面的命令。

大写命令N不会打印模式空间的内容,也不会清除模式空间,从输入文件中读取下一行到模式空间,然后继续执行后面的命令。。

例如:

$ sed -e ‘{N;s/\n/:/}‘ empnametitle.txt
John Doe:CEO
Jason Smith:IT Manager
Raj Reddy:Sysadmin
Anadn Ram:Developer
Jane Miller:Sales Manager

 

2.打印多行模式中的第一行 P

小写命令p打印模式空间的内容,大写P也打印模式空间内容,直到遇到换行符\n

例如:

$ sed -n -e ‘N‘ -e ‘/Manager/P‘ empnametitle.txt
Jason Smith
Jane Miller

 

3.删除多行模式中的第一行 D

小写命令d会删除模式空间内容,然后读取下一条记录到模式空间,并忽略后面的命令,从头开始下一次循环

大写命令D既不会读取下一条记录,也不会完全清空模式孔家,除非模式空间只有一行。它只会:

(1)删除模式空间的部分内容,直到遇到换行符\n

(2)忽略后续命令,在当前模式空间中从头开始执行命令

 

4.循环和分支 

命令b和:label标签

使用标签和分支命令b, 可以改变sed的执行流程:

(1):label定义一个标签

(2)b label执行该标签后面的命令,sed会跳转到该标签,然后执行后面的命令

(3)命令b后面可以不跟任何标签,这种情况下,它会直接跳到sed脚本的结尾

 

5.使用命令t进行循环

命令t的作用是, 如果前面的命令执行成功,那么久跳转到t指定的标签处,继续往下执行后续命令。否则,仍然继续正常的执行流程

 

以上是关于七.sed多行模式和循环的主要内容,如果未能解决你的问题,请参考以下文章

sed高级命令及模式空间和交换空间简介

在 bash 脚本中使用 sed 替换多行模式

使用 grep 和 sed 在 shell 中查找和替换同一文件中的多行

sed 之 N D P

sed多行模板替换

sed进阶