借个例子说明sed的模式空间,以及针对模式空间的N,P,D用法

时间:2023-03-08 15:50:32

下面是我们要处理的文本:题目要求是把所有散列在不同行的同一个中括号中的数据集中在一起, 见下表就秒懂了吧

处理前的文本 处理后的文本
[123456]
[AS
DEF]
[ABCD
123W
F]
[789ADC]
[12
34
456AB
WQ
456
WIU]
[123456]
[ASDEF]
[ABCD123WF]
[789ADC]
[1234456ABWQ456WIU]

先说指令:  sed '/^\[/{:a;N;/^\[/!{s/\n\[//g;ta}};P;D;' enter.txt

这条指令真是把本人折腾得够呛啊, 其中涉及到sed中几个关键指令的意义:

1) N 读取下一行数据到模式空间, 不挤掉之前模式空间的内容;

2) P 打印模式空间中第一行内容;

3) D 删除模式空间中第一行内容, 并对模式空间中的数据, 再来一遍sed命令

4) sed每次处理完一行数据后(或者指令读到文件尾), 默认情况下都是要把模式空间中的内容输出, -n会不打印.

好了,基于上面四点可以自己先分析下上面的指令了. enjoy.