Frank Tan

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

今天一个同事问我如何将一列转换成一行,第一想法就是用sed,但是因为sed是行编辑器,所以如下


ls -1 | sed -e "s/\n/ /g"

并不会生效。

于是就告诉他先把要处理的内容放到vi里面,然后用J连接或者:%s/\n/ /g处理。
后来他告诉我这样不够cool(他的原话),于是乎求助google,g到该命令:

ls -1 | tr -s '\n' ' '
如此任务就算完成了,仔细看了一下tr,发现他是一个处理字符的工具,能实现的东西基本都能用sed实现。
于是再研究了一下用sed怎么转换:

ls -1 | sed -ne "H;$ {x;s/\n/ /g;p}"

比起tr来稍微复杂了点,H表示把pattern space 的内容追加到 hold space中去,H可以带一个地址,这里用的是$,表示到文件的末尾,
然后用x将之取到pattern space中,把\n替换成空格再打印即可。

这里用ls -1来作为这个演示程序的输入,如果有多列的文件,要把列转为行怎么做呢?这时可以使用awk将每列取出,然后再按如上方法处理
即可。
posted on 2010-03-23 18:43  Frank Tan  阅读(3109)  评论(0编辑  收藏  举报