每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。
分类: LINUX
2011-08-04 13:25:54
[解析]
当初看到这个题的时候无从下手,真没有想到可以用sed来完成,Tim大师的思路真的值得人五体投地的敬佩,向前辈们致敬。这些另辟蹊径的思路真的值得大家借鉴和积累。接着来分析,首先Tim大师的思路是把所有的行全读入pattern space中,来统一处理,所以有了“:a;N!ba;”这个命令,到了最后一行不执行跳转,那现在pattern space中的内容就成了“123\n232\n313\n321”,然后执行后面的替换语句,由于充分利用正则贪婪匹配的原理,它会匹配到最后一个2的,然后用小括号标记起来,最后打印。
[解析]
同样,在理解了这个替换原理后我们同样可以使用awk来完成它,把所有内容赋值给一个变量,然后利用gensub函数对它进行正则替换。
[解析]
这才是真的awk思路,这样的语法结构可以打印除第一行和最后一行以外的内容,就是斩头去尾,用三目运算来控制好输出格式就行了。
[解析]
先膜拜黑哥的思路,把开头到2的和末尾到2的设置为RS,直接NF重组输出。