|
发表于 2004-8-19 13:41:38
|
显示全部楼层
我刚才那一句不是指这个脚本简单,不过我还是硬着头皮解释一下
- echo abcde | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
复制代码
这里包括4条sed命令:
(1)/\n/!G 如果模式空间没有换行符就在后面加一个换行符(本来是加保持空间的内容,但保持空间是空的)
(2)s/\(.\)\(.*\n\)/&\2\1/ 将被匹配的内容(即模式空间的第一个非空行)换成以下三部分:被匹配部分,被匹配部分除去第一个字母,第一个字母
(3)//D 使用上一次的模式即/\(.\)\(.*\n\)/,如果匹配则删去模式空间第一行并返回第一条命令继续执行
(4)s/.// 删去模式空间第一个字符
然后,来看看它是怎样工作的:
模式空间内容是:abcde
第一轮:
经过(1):abcde\n
经过(2):abcde\nbcde\na
经过(3):bcde\na 然后反回到(1)
第二论:
经过(1):因为有\n所以不执行
经过(2):bcde\ncde\nba
经过(3):cde\nba 然后反回到(1)
注意这时ba已经反过来了,以此类推,
最后一轮经过(3):\nedcba 这时不能匹配/\(.\)\(.*\n\)/了,也不用返回(1)了
经过(4):edcba
请批评指正 |
|