查看文章 |
linux中的tr命令---字符的替换与删除
2008-06-26 21:16
指令名称:
tr(1) - 字符的转换与删除
说明:
这指令是个字符过滤器,数据由标准输入流入,经过指令的指定转换后,再导向标准输出。感觉上很像一个筛子。
基本上,指令一次处理一个字符,所以不具备识别"英文单字"这种特定顺序的字符组合。目前这个指令也不适合处理中文档案。 选项:
-c, --complement
反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
-d, --delete
删除指令字符
-s, --squeeze-repeats
缩减连续重复的字符成指定的单个字符
-t, --truncate-set1
削减 SET1 指定范围,使之与 SET2 设定长度相等
--help
显示程序用法信息
--version
显示程序本身的版本信息
以下是特定的字符设定(SETs),与他们所代表的意义
CHAR1-CHAR2
:字符范围从 CHAR1 到 CHAR2 的指定,范围的指定以 ASCII 码的次序为基础,只能由小到大,不能由大到小。 [CHAR*] :这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止
[CHAR*REPEAT]
:这也是 SET2 专用的设定,功能是重复指定的字符到设定的 REPEAT 次数为止(REPEAT 的数字采 8 进位制计算,以 0 为开始) [:alnum:] :所有字母字符与数字
[:alpha:] :所有字母字符 [:blank:] :所有水平空格 [:cntrl:] :所有控制字符 [:digit:] :所有数字 [:graph:] :所有可打印的字符(不包含空格符) [:lower:] :所有小写字母 [:print:] :所有可打印的字符(包含空格符) [:punct:] :所有标点字符 [:space:] :所有水平与垂直空格符 [:upper:] :所有大写字母 [:xdigit:] :所有 16 进位制的数字 [=CHAR=] :所有符合指定的字符(等号里的 CHAR,代表你可自订的字符) 实例说明:
以下两种型态是运用 tr 指令常见的模式。
基本上 tr 属于搭配型指令,因此数据通常藉由 pipeline(符号"|") 或 input redirection(符号"<")来导入,其指令本身并不支持档案的呼叫。导入的数据经由 tr 过滤转换后会导向标准输出显示在屏幕上。
大小字母的转换
tr 指令非常适合用来做大小写字母的转换。
第一行是将大写字母转成小写字母,第二行则是小写字母转成大写字母。两行使用的语法则是特定的写法,其实也可以改写如下
这种写法比较简短,我个人也比较惯用。其实用这种写法有一个好处,当我想将一个文本文件的大小写全部反过来时,这个语法可以做到。来看下面的例子
这是一个普通的文本文件,使用 tr 可以容易地将整个档案的大小写字母反过来,如下
呀喝!猪羊变色。新档案 file-aA 的大写的字母转成小写字母。
简单的字母代替文字加密
在多人多任务的 UNIX 或 Linux OS 中,一般使用者其实很难保有隐私,因为永远还有一个人可以查看管理你的私人档案,那就是你的系统管理者。所以当你需要在这样一个公共空间里,保有一点基本的自我隐私时,文件最好为它加密。
tr 可以产生趣味大于实质用途的加密,方法简单如下
为了举例方便,密码字母集我只设定小写字母。如果 真想用的话,最好将整个 ASCII 全部代替会比较理想。同时为了安全起见,指令不可在交谈模式下使用,因为程序有可能正被观察中,同时也必须注意history功能是否储存的密码字母集。 最好的方式是将程序写成 script 来执行,当然密码字母集不可包含在其中。
解密的过程只需将正确的密码字母集放到 SET1 将替换的程序反过来即可...
这种加密法适合 100 个字母以内的简短讯息使用,绝对可以蒙过一些小Q蛋,只是碰上频率分析法专家会被笑而已。
压缩过多的连续空白或空行
对空白过多的文本文件,这个做法可以简单迅速地解决。如果对象是空行,也可以使用
所以相似的问题,都可藉由 -s 选项做有效的缩减。
让转换参数做1对1的有效对应
有时一不小心 SET1 的范围指定多过对应到 SET2 的指定时,执行结果会有小问题,来看下例
也就是说,SET1 对应到 SET2 的关系变成 a 转换成 0, b 转换成 1, c-z 转换成 2。通常,最后的 c-z 对应多半是设定时没有预料到的对应关系。
要避免或限制这种效应,可以加上 -t 选项
因 -t 选项,使对应关系改变成 a 转换成 0, b 转换成 1, c 转换成 2, d-z 因 SET2 没有设定而不做任何转换对应。 |
最近读者: