Chinaunix首页 | 论坛 | 博客
  • 博客访问: 135955
  • 博文数量: 28
  • 博客积分: 527
  • 博客等级: 中士
  • 技术积分: 367
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-09 17:05
个人简介

运维开发工程师。致力于网络,WEB应用服务,Linux系统运维。方向:操作系统,监控,自动化

文章分类

全部博文(28)

文章存档

2013年(12)

2012年(16)

分类: Python/Ruby

2012-12-09 09:37:33

Intro
本节讲一讲字符替换命令tr的用法


tr命令
格式
  1. tr [OPTION] chars_to_be_transformed_from [chars_to_be_transformed_to]
  1. tr接受标准输入,根据给定的单个字符映射对,将来源文本数据进行字符查找和转换(而非字符串),并原样输出。
  2. 管道和io重定向<是两个输入tr的方式。tr接受标准输入,而非文件的命令行参数。这一点和cat一样。
  3. 使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。
选项
  1. -c 取反:用字符集2的字符逐一替换字符串1中字符集的补集,要求字符集为ASCII;
  2. -d 删除:删除字符集1中的字符;
  3. -s 去重:删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串;

例程
  1. 一般用法
  2. $ tr 'ieoau' 'IEOAU' < plain.txt  #建立i->I;e->E;o->O;a->A;u->U;的映射对,而非替换字符串,那是sed的工作
  3. >sEnd sOmEOnE tO lOvE mE
  4. >I nEEd tO rEst In Arms
  5. ----------------------------------------
  6. $ tr '{}' '()' < textfile > newfile #转换花括号到小括号
  7. -----------------------------------------
  8. $ tr [a-z] [A-Z] < plain.txt #小写转换成大写
  9. $ tr 'a-z' 'A-Z' < plain.txt #等效形式
  10. >SEND SOMEONE TO LOVE ME
  11. >I NEED TO REST IN ARMS 
  12. $ tr 'a\-z' 'A\-Z' < plain.txt#只转换a,-,z三个字符。
  13. -----------------------------------------
  14. 删除用法
  15. $ tr -d 'soul' < plain.txt#注意,'s','o','u','l'每个字符都会被删除
  16. >end mene t ve me
  17. >i need t ret in arm
  18. -----------------------------------------
  19. $ tr -d '\r' < windows_format_files > unix_format_files #实现dos2unix转换
  20. >/home/work/dataio/data/jnprod2alb/$
  21. >/home/work/dataio/data/adrccharge$
  22. -----------------------------------------
  23. 去重用法
  24. $ echo xxxxxxxxxyyzzz | tr -s 'x'
  25. xyyzzz
  26. $ echo xxxxxxxxxyyzzz | tr -s 'xyz'
  27. xyz
  28. $ echo xxxxxxyyyyyzzzz | tr 'x' 'X'
  29. XXXXXXyyyyyzzzz
  30. $ echo xxxxxxyyyyyzzzz | tr -s 'x' 'X'         #合并去重后再替换
  31. $ echo xxxxxxyyyyyzzzz | tr -s 'x' | tr 'x' 'X'    #等价形式    
  32. Xyyyyyzzzz
  33. ----------------------------------------
  34. 取补集用法
  35. $ echo a1b2c3 | tr -c '0-9' 'X'
  36. X1X2X3$            #换行符\n也一并被替换干净
  37. $ echo a1b2c3 | tr -c '0-9' '[X*]'        #等价形式 


技巧
dos2unix的简单实现
  1. $ tr -s '\r' '\n' < windows_file > unix_file
  2. $ tr -d '\r' < windows_file > unix_file
对一段文章建立单词列表
  1. $ tr -cs 'a-zA-Z' '\n' < paragragh > words_list
小写变大写
  1. $ tr [a-z] [A-Z] < plain.txt        #小写转换成大写
  2. $ tr 'a-z' 'A-Z' < plain.txt        #等效形式


结论
在需要做字符替换、字符去重等工作时,小巧的tr往往展现出了比sed和awk等"大型"工具更简洁直接的解决能力。
阅读(1444) | 评论(0) | 转发(0) |
0

上一篇:003-shell环境

下一篇:010-截取列字段cut

给主人留下些什么吧!~~