七.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多行模式和循环的主要内容,如果未能解决你的问题,请参考以下文章