sedsed是学好sed的得力工具,推荐。官方网址:http://sedsed.sourceforge.net/
即使没有现成的Linux系统,只要安装了python和sed就可运行。
附安装过程:
cd /bin
wget http://sedsed.sourceforge.net/sedsed-1.0 -O sedsed
chmod 755 sedsed
sedsed使用示例:
./sedsed -d ‘1!G;h;$!d’ 666
PATT:1$ \先读入文件第一行,同时存入模式空间,
HOLD:$ \初始化缓存空间为“空”,
COMM:1 !G \执行命令,不匹配第一行(整个文件的第一行)时把当前缓存空间里的内容(上面初始化后那个“空”)追加到当前模式空间里,可惜这里匹配了第一行,所以该命令此次没干活,
PATT:1$ \上一行的命令没干活,所以模式空间内容也没变,
HOLD:$ \没人搭理缓存空间,所以依旧是“空”,
COMM:h \执行命令,把当前模式空间的内容(一个“1”)复制到当前缓存空间(内容是“空”),
PATT:1$ \上一行的命令复制它了,但没改变它
HOLD:1$ \被h后,由“空”变成了“1”
COMM:$ !d \执行命令,不匹配最后一行(整个文件的最后一行)时全部删掉(d都是针对模式空间的,所以删的都是模式空间的内容),现在模式空间里还是文件的第一行(不是最后行,所以被删掉),
PATT:2$ \因上一行模式空间被删掉,自动(?)读入文件第二行
HOLD:1$ \$!d命令没搭理它,它保持不变
COMM:1 !G \现在处理文件第二行(因为不是第一行所以匹配并执行G命令),把当前缓存空间(上一行的就是当前了,里面那个“1”)的内容追加到当前模式空间(里面现在有个“2”了),
PATT:2\n1$ \被1!G后就成这样了,后面就是循环递推了。。。
HOLD:1$
COMM:h
PATT:2\n1$
HOLD:2\n1$
COMM:$ !d
PATT:3$
HOLD:2\n1$
COMM:1 !G
PATT:3\n2\n1$
HOLD:2\n1$
COMM:h
PATT:3\n2\n1$
HOLD:3\n2\n1$
COMM:$ !d
PATT:4$
HOLD:3\n2\n1$
COMM:1 !G
PATT:4\n3\n2\n1$
HOLD:3\n2\n1$
COMM:h
PATT:4\n3\n2\n1$
HOLD:4\n3\n2\n1$
COMM:$ !d
PATT:5$
HOLD:4\n3\n2\n1$
COMM:1 !G
PATT:5\n4\n3\n2\n1$
HOLD:4\n3\n2\n1$
COMM:h
PATT:5\n4\n3\n2\n1$
HOLD:5\n4\n3\n2\n1$
COMM:$ !d
PATT:6$
HOLD:5\n4\n3\n2\n1$
COMM:1 !G
PATT:6\n5\n4\n3\n2\n1$
HOLD:5\n4\n3\n2\n1$
COMM:h
PATT:6\n5\n4\n3\n2\n1$
HOLD:6\n5\n4\n3\n2\n1$
COMM:$ !d
PATT:6\n5\n4\n3\n2\n1$
HOLD:6\n5\n4\n3\n2\n1$
6
5
4
3
2
1