sed实例分析(一)---P与D命令的用法

一、示例文件及需求:

catfile

111111111111111111

222222222222222222

=333333333333333333

444444444444444444

如果某行以=开始,则合并到上一行并替代=为空格

二、sed脚本执行结果:

sed-e:a-e'$!N;s/\n=//;ta'-e'P;D'file

111111111111111111

222222222222222222333333333333333333

444444444444444444

三、命令说明:

:a定义一个标签位置

$!N如果不是最后一行,就读入新行附加于patternspace之后,以“\n”分隔

s/\n=//如果发现了\n=的,替换为空格

ta如果找到了替换,从标签a处再执行,否则向下走

P打印patternspace中的第一个\n之前的内容

D删除patternspace中的第一个\n之前的内容,不打印模式空间,如果有模式空间还有数据,不会读取新行,继续开始下一循环

四、执行流程分析:

第一行执行,没有找到 \n= 打印第一行,读入第二行,脚本头部执行
第二行执行,找到 \n= ,替换为空格,从标签a处再执行
第三行执行,没有找到 \n= 打印第二三行的合并和第四行,读入新行,没有了,结束

 

COMM:代表命令,PATT:代表patternspace的内容,其他为sed输出的内容

PATT:111111111111111111$

COMM::a

COMM:$!N

PATT:111111111111111111\n222222222222222222$

COMM:s/\n=//

PATT:111111111111111111\n222222222222222222$

COMM:ta

COMM:P

111111111111111111

PATT:111111111111111111\n222222222222222222$

COMM:D

PATT:222222222222222222$

COMM::a

COMM:$!N

PATT:222222222222222222\n=333333333333333333$

COMM:s/\n=//

PATT:222222222222222222333333333333333333$

COMM:ta

COMM:$!N

PATT:222222222222222222333333333333333333\n444444444444444444$

COMM:s/\n=//

PATT:222222222222222222333333333333333333\n444444444444444444$

COMM:ta

COMM:P

222222222222222222333333333333333333

PATT:222222222222222222333333333333333333\n444444444444444444$

COMM:D

PATT:444444444444444444$

COMM::a

COMM:$!N

PATT:444444444444444444$

COMM:s/\n=//

PATT:444444444444444444$

COMM:ta

COMM:P

444444444444444444

PATT:444444444444444444$

COMM:D

五、参考:

http://bbs.chinaunix.net/thread-277289-1-1.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值