Chinaunix首页 | 论坛 | 博客
  • 博客访问: 333451
  • 博文数量: 103
  • 博客积分: 3886
  • 博客等级: 中校
  • 技术积分: 1005
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-28 15:00
文章分类

全部博文(103)

文章存档

2011年(30)

2010年(73)

分类:

2010-05-07 15:41:23

tr是Unix系统非常实用的工具,其实用tr做到的事情,几乎都可用sed做到,你可以把tr当作是实现sed许多基本功能的sed“简体”。我认为tr是简单的“字符”处理工具,而sed是功能非常强大的“字符串”处理工具。
【注意】tr是单个字符处理工具,而不是字符串处理工具!
我自己用过比较实用的例子如下:
1、将文件file中出现的"abc"替换为"xyz"
# cat file | tr "abc" "xyz" > new_file
【注意】这里,凡是在file中出现的"a"字母,都替换成"x"字母,"b"字母替换为"y"字母,"c"字母替换为"z"字母。而不是将字符串"abc"替换为字符串"xyz"。
2、使用tr命令“统一”字母大小写
(小写 --> 大写)
# cat file | tr [a-z] [A-Z] > new_file
(大写 --> 小写)
# cat file | tr [A-Z] [a-z] > new_file
3、把文件中的数字0-9替换为a-j
# cat file | tr [0-9] [a-j] > new_file

4、删除文件file中出现的"Snail"字符
# cat file | tr -d "Snail" > new_file
【注意】这里,凡是在file文件中出现的'S','n','a','i','l'字符都会被删除!而不是紧紧删除出现的"Snail”字符串。
5、删除文件file中出现的换行'\n'、制表'\t'字符
# cat file | tr -d "\n\t" > new_file
不可见字符都得用转义字符来表示的,这个都是统一的。
6、删除“连续着的”重复字母,只保留第一个
# cat file | tr -s [a-zA-Z] > new_file
7、删除空行
# cat file | tr -s "\n" > new_file
8、删除Windows文件“造成”的'^M'字符
# cat file | tr -d "\r" > new_file
或者
# cat file | tr -s "\r" "\n" > new_file
【注意】这里-s后面是两个参数"\r"和"\n",用后者替换前者
9、用空格符\040替换制表符\011
# cat file | tr -s "\011" "\040" > new_file
10、把路径变量中的冒号":",替换成换行符"\n"
# echo $PATH | tr -s ":" "\n"
这样看到的路径变量是不是更清晰:)
 
注意:
1、众所周知,在Unix操作系统中,无论是文件名还是目录名,又或者是命令,对于大小写都是敏感的。这根微软操作系统有很大的不同。为此在这个命令中,需要用到两个参数。在这个参数中大小写也是敏感的。如tr a c与tr A c具有不同的含义。第一个命令是将小写的英文字符a利用小写的英文字符c来替换。而第二个命令表示利用小写的英文字符c去替换所有大写的英文字符A。为此笔者提醒各位系统工程师,在使用这个命令的时候第一个主要注意的就是参数的大小写一定要一致。否则的话,很难达到预计的效果。
  2、两个字符串中长度需要相同。通常情况下采用这个命令会将第一个参数中的字符变换成第二个参数中的相应字符。也就是说,利用第二个参数中的第一个字符替换成第一个参数中的第一个字符,依此类推,其他字符也按照这个规则进行替换。此时,如果两个参数的长度不相等的话,那么会出现什么情况呢?如 tr abc ab。此时第一个参数表达式将找不到对应的字符。即系统不知道将字符c利用什么字符来代替。为此在使用这个命令时,要确保两个参数的长度必须相等。
  3、利用变量提高脚本程序的可用性。有时候系统工程师可能需要经常用到类似的转换功能。如使用这个命令可以简单的实现一些文件的加密作业。如可以预先将英文字符、数字等等建立一个一一对应的关系。然后写完内容之后,可以利用tr命令将文本转换为毫无意义的一个文件。如果不知道这种对应关系的话,那么其他用户即使得到这个文件也不能够破译出到底这个文本想表示什么内容。然后知道这个对应关系的用户,拿到这个文件后,再次反向执行一下这个命令(即将前后两个参数位置对调一下),就可以将文本的内容转换成原先的内容。如果建立好这个脚本之后,就可以重复利用这个脚不程序来对一些文件进行简单的加密。但是要提高其安全性的话,往往需要不断的对这个对应的规则进行调整。此时是否需要更改脚本文件呢?其实不用。因为这个tr命令支持变量。其实就是将命令中的两个参数分别赋值给两个变量。然后在执行命令的时候让系统分别对这两个变量求值,得出正确的对应规则。如此的话,当需要更改对应规则时,不需要改变这个脚本。只需要修改这两个变量的值即可。
阅读(1077) | 评论(0) | 转发(0) |
0

上一篇:rysn:文件同步

下一篇:LDAP 概念与架设

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