LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: yongjian

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

[复制链接]
 楼主| 发表于 2004-4-29 01:15:07 | 显示全部楼层
原文:

  1. lasdkjflak sdmfl              

  2. lasdfjlk mlksmd|kcvmlas                  
  3.   asdl kasdjfl               

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

  7. asdkjl kasdjl|               

  8.    kasld asas|dfasefe|qed         
复制代码

执行代码:

  1. cat end_space_data | sed s/^[:blank:][:blank:]*// | sed s/[:blank:][:blank:]*$//
复制代码

输出结果:

  1. sdkjflak sdmfl

  2. sdfjlk mlksmd|kcvmlas
  3.   asdl kasdjfl

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

  7. sdkjl kasdjl|

  8.    kasld asas|dfasefe|qed
复制代码

不但其后空白符号没去,我的文件内容倒是去掉了不少,这是怎么回事?
 楼主| 发表于 2004-4-29 01:15:59 | 显示全部楼层
sorry, 是'前后'空白符号,不是'其后'!
发表于 2004-4-29 01:17:29 | 显示全部楼层
这是个sed脚本啊~~~~
sed -f xxx
发表于 2004-4-29 01:21:07 | 显示全部楼层
我写了个perl的,;刚看到perl的s///运算符)
[php]
#!perl -w
open FILE,"<file";
while(<FILE>){s/^\t+//g;s/^ +//g;s/ +$//g;print;}
close FILE;
[/php]

  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#perl p|cat -A
  15. lasdkjflak sdmfl$
  16. $
  17. lasdfjlk mlksmd|kcvmlas$
  18. asdl kasdjfl$
  19. $
  20. asdk laskmvcasldf$
  21. asldmvclas |lasd$
  22. lasiejieasdf$
  23. $
  24. asdkjl kasdjl|$
  25. $
  26. kasld asas|dfasefe|qed$
复制代码
 楼主| 发表于 2004-4-29 01:25:30 | 显示全部楼层
To: 教主. 有什么区别吗? sed脚本执行和命令行不也是一样的嘛. 反正我也试了脚本,结果是一样的.
发表于 2004-4-29 01:29:59 | 显示全部楼层
最初由 yongjian 发表
To: 教主. 有什么区别吗? sed脚本执行和命令行不也是一样的嘛. 反正我也试了脚本,结果是一样的.

嗯,是一样的,:sorry
给出修正版本

  1. s@^[[:blank:]][[:blank:]]*@@  [color=green]#去掉至少一个的前导空格或制表符[/color]
  2. s@[[:blank:]][[:blank:]]*$@@  [color=green] #去掉至少一个的后置空格或制表符[/color]
复制代码

呵呵,[:blank:]被sed误解为字符集合了,所以:blank:这些字母都会被去掉,现在把它嵌套入[],就可以当POSIX字符用了。:cool:

ps:暂时没有机会用Linux,所以只能纸上谈兵,兄弟见谅。
发表于 2004-4-29 02:00:41 | 显示全部楼层
我这个比较麻烦,;)

  1. /home/javalee#\
  2. >cat file|sed 's/^       \{1,\}//g;s/^[ ]\{1,\}//g;s/[ ]\{1,\}$//g'|cat -A #第一个tab按Ctrl+V+I得到
  3. lasdkjflak sdmfl$
  4. $
  5. lasdfjlk mlksmd|kcvmlas$
  6. asdl kasdjfl$
  7. $
  8. asdk laskmvcasldf$
  9. asldmvclas |lasd$
  10. lasiejieasdf$
  11. $
  12. asdkjl kasdjl|$
  13. $
  14. kasld asas|dfasefe|qed$
复制代码
 楼主| 发表于 2004-4-29 03:30:23 | 显示全部楼层
嗯, javalee兄的办法不错! 用sed的\{n,m\},这是扩展式中的吧.
发表于 2004-4-29 08:56:13 | 显示全部楼层
最初由 home_king 发表

  1.           [color=green]#因为sed不支持"+",所以只好用"  *"来代替[/color]
复制代码
sed 可以用 \+
发表于 2004-4-29 09:21:44 | 显示全部楼层
最初由 yongjian 发表
嗯, javalee兄的办法不错! 用sed的\{n,m\},这是扩展式中的吧.

对于sed若干扩展正则表达式可用\来引用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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