一、sed读取行和打印行解析:
1.sed读取到模式空间的行不包括\n字符;
2.sed读取多行到模式空间时,自动以\n字符进行分隔;
3.sed打印行时并不打印以模式空间加的\n字符,而是行逐行打印除\n外的字符,然后由p或P命令添加\n字符;
4.sed默认自动打印每一个模式空间单元,其实是隐式执行-e 'p;d'命令
误解:
1.sed读取到模式空间的行包括\n字符;
2.sed读取多行到模式空间时,没有以\n字符进行分隔,而是直接读取文件中的\n;
3.sed打印一行时,直接打印模式空间行数据+\n;
二、分析:
1.示例文件:
cat file
test111
222222
2.sed处理:
sed -n -e :a -e 'N;s/\n\n/\n/;Ta' -e '/test/p'
基本流程是:一直读取新行,直到找到\n\n,并替换成\n,最后删除匹配test的行
3.误解分析:
PATT为模式空间,COMM为执行命令,OUT为标准输出
PATT:test111\n
COMM::a
COMM:$!N
PATT:test111\n\n
COMM:s/\n\n/\n/
PATT:test111
COMM:Ta
COMM:/test/p
OUT:test111
PATT:
PATT:222222\n
COMM::a
COMM:$!N
COMM:S/\n\n/\n/
COMM:Ta
COMM:/test/p
OUT:
PATT:
最终输出结果:test111
3.正解分析:
PATT:test111
COMM::a
COMM:$!N
PATT:test111\n空
COMM:s/\n\n/\n/
COMM:Ta
COMM:/$!N
PATT:test111\n\n22222
COMM:s/\n\n/\n/
PATH:test111\n22222
COMM:/test/p
OUT:test111\n22222
PATT:
最终输出结果:test111\n22222\n