对sed的一些命令,若是不是很了解的话,很多脚本很难理解。可以用sedsed工具查看模式空间与保持空间的变化。
sedsed下载地址:
http://aurelio.net/projects/sedsed/#download
一个例子:
将多个空行合并成一个空行(sed & awk 中的例子):
[root@localhost awk]# cat c c1 c2 c3 c4
[root@localhost awk]# sed '/^$/{N;/\n$/D}' c c1 c2 c3 c4
sedsed工具使用:
由于没有用到保持空间,所以用参数把保持空间的变化隐藏。
[root@localhost awk]# ./sedsed -d --hide=hold '/^$/{N;/\n$/D}' c PATT:c1$ COMM:/^$/ { PATT:c1$ c1 PATT:$ COMM:/^$/ { COMM:N PATT:\nc2$ COMM:/\n$/ D PATT:\nc2$ COMM:} PATT:\nc2$ c2 PATT:$ COMM:/^$/ { COMM:N PATT:\n$ COMM:/\n$/ D PATT:$ COMM:/^$/ { COMM:N PATT:\n$ COMM:/\n$/ D PATT:$ COMM:/^$/ { COMM:N PATT:\nc3$ COMM:/\n$/ D PATT:\nc3$ COMM:} PATT:\nc3$ c3 PATT:$ COMM:/^$/ { COMM:N PATT:\n$ COMM:/\n$/ D PATT:$ COMM:/^$/ { COMM:N PATT:\nc4$ COMM:/\n$/ D PATT:\nc4$ COMM:} PATT:\nc4$ c4 [root@localhost awk]#
N:追加下一行。多行Next命令通过读取新的输入行,并将它添加到模式空间的现有内容之后,来创建多行模式空间,模式空间最初的内容和新的输入行之间用换行符分隔。
N命令读取新的输入行后,当命令完成,返回到开始,它会在刚才N读取的新的输入行后面的一条读取。如下面:
[root@localhost awk]# cat d d5 d6 d7 d8 [root@localhost awk]# ./sedsed -d --hide=hold 'N' d PATT:d5$ COMM:N PATT:d5\nd6$ d5 d6 PATT:d7$ COMM:N PATT:d7\nd8$ d7 d8 [root@localhost awk]#
D:删除模式空间中直到第一个嵌入的换行符的这部分内容,它不会导致读入新的输入行。它返回到脚本的顶端(即跳过D后面的语句),将这些指令应用于模式空间剩余的内容。
[root@localhost awk]# cat d d5 d6 d7 d8 [root@localhost awk]# ./sedsed -d --hide=hold 'N;D;s/.*/a/' d PATT:d5$ COMM:N PATT:d5\nd6$ COMM:D PATT:d6$ COMM:N PATT:d6\nd7$ COMM:D PATT:d7$ COMM:N PATT:d7\nd8$ COMM:D PATT:d8$ COMM:N d8 [root@localhost awk]#
转载于:https://blog.51cto.com/hxw168/1436143