LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2617|回复: 35

清理blank space的问题(sed&awk)[基本解决]

[复制链接]
发表于 2004-4-28 23:48:51 | 显示全部楼层 |阅读模式
有这样一个文件,例子:

  1. lasdkjflak sdmfl            

  2. lasdfjlk mlksmd|kcvmlas   
  3.   asdl kasdjfl                       

  4. asdk laskmvcasldf                 
  5.    asldmvclas |lasd        
  6. lasiejieasdf      

  7. asdkjl kasdjl|                  
  8.                
  9.    kasld asas|dfasefe|qed                     
复制代码

这个文件中每一行的前,后都有不定数的空格(whitespace), 有的3个, 有的5个, 有的2个...现在想用sed或是awk将每一行前,后的不管多少空格都去掉.但不能改变行之间的空行(\n)和整个文件的结构.(有的是一行,有的两行在一起,有的几行一起,不能format成全部都是每一行都空一行的形式.)也就是说只需要将有字的每行的前后不定数的空格去掉,同时保证这行的形式不变.(也就是说不能将行中间哪些空格去了)
怎么做???
发表于 2004-4-28 23:56:12 | 显示全部楼层

  1. s@^  *@@  [color=green]#去掉至少一个的前导空格[/color]
  2. s@  *$@@  [color=green]#去掉至少一个的后置空格[/color]
  3.           [color=green]#因为sed不支持"+",所以只好用"  *"来代替[/color]
复制代码
 楼主| 发表于 2004-4-29 00:20:39 | 显示全部楼层
不懂,能否请教主解释一下,谢谢.
发表于 2004-4-29 00:31:14 | 显示全部楼层
结果还行吗?
我注释一下吧,请见楼上。
发表于 2004-4-29 00:32:51 | 显示全部楼层
是这样的效果吧~~
  1. /home/javalee#cat -A file
  2. lasdkjflak sdmfl             $
  3. $
  4. lasdfjlk mlksmd|kcvmlas    $
  5.   asdl kasdjfl                       $
  6. $
  7.   asdk laskmvcasldf                 $
  8.      asldmvclas |lasd        $
  9.       lasiejieasdf       $
  10. $
  11.       asdkjl kasdjl|                  $
  12.                       $
  13. ^I^I         kasld asas|dfasefe|qed  $
  14. /home/javalee#
  15. /home/javalee#\
  16. >cat file|tr -d '\t'|awk '{gsub(/^([ ])+|([ ])+$/,"");print}'|cat -A
  17. lasdkjflak sdmfl$
  18. $
  19. lasdfjlk mlksmd|kcvmlas$
  20. asdl kasdjfl$
  21. $
  22. asdk laskmvcasldf$
  23. asldmvclas |lasd$
  24. lasiejieasdf$
  25. $
  26. asdkjl kasdjl|$
  27. $
  28. kasld asas|dfasefe|qed$
复制代码
发表于 2004-4-29 00:35:58 | 显示全部楼层
to javalee:
嗯,awk也行,不过正则表达式匹配不是awk的强项。
发表于 2004-4-29 00:38:42 | 显示全部楼层
最初由 home_king 发表
to javalee:
嗯,awk也行,不过正则表达式匹配不是awk的强项。

教主说的是,我怎么也无法更好的匹配tab,所以索性用个tr得了 :thank
发表于 2004-4-29 00:40:18 | 显示全部楼层
最初由 javalee 发表
教主说的是,我怎么也无法更好的匹配tab,所以索性用个tr得了 :thank

注意,按楼主所言,只存在空格而已。具体情况具体分析,javalee兄教的哦,呵呵~~~~
发表于 2004-4-29 00:43:12 | 显示全部楼层
to javalee:
[:blank:]+即可匹配空格或者制表符。
现在的awk都支持POSIX字符类了。
 楼主| 发表于 2004-4-29 00:48:16 | 显示全部楼层
哦, 明白了!谢谢教主和javalee兄! 原来教主将sed中的'/'分割符换成了'@'.诈看,我还以为是什么通配表示符呢.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表