tr用来从标准输入中通过替换或删除操作进行字符转换t r主要用于删除文件中控制字符或进行字符转换使用t r时要转换两个字符串字符串用于查询字符串用于处理各种转换 t r刚执行时字符串中的字符被映射到字符串中的字符然后转换操作开始 本章内容有 * 大小写转换 * 去除控制字符 * 删除空行 带有最常用选项的t r命令格式为 t r c d s [ s t r i n g _ t o _ t r a n s l a t e _ f r o m ] [ s t r i n g _ t o _ t r a n s l a t e _ t o ] i n p u t _ f i l e 这里 c 用字符串中字符集的补集替换此字符集要求字符集为A S C I I d 删除字符串中所有输入字符 s 删除所有重复出现字符序列只保留第一个即将重复出现字符串压缩为一个字符 串 I n p u t f i l e是转换文件名虽然可以使用其他格式输入但这种格式最常用 字符范围 使用t r时可以指定字符串列表或范围作为形成字符串的模式这看起来很像正则表达式但实际上不是指定字符串或字符串的内容时只能使用单字符或字符串范围或列表 [az] az内的字符组成的字符串 [AZ] AZ内的字符组成的字符串 [] 数字串 /octal 一个三位的八进制数对应有效的A S C I I字符 [O*n] 表示字符O重复出现指定次数n因此[ O * ]匹配O O的字符串 大部分t r变种支持字符类和速记控制字符字符类格式为[c l a s s ]包含数字希腊字母 空行小写大写c n t r l键空格点记符图形等等表 包括最常用的控制字符的速记方式及三位八进制引用方式 当用一个单字符替换一个字符串或字符范围时注意字符并不放在方括号里( [ ])一些系统也可以使用方括号例如可以写成[\ ]或\ t r也允许不加引号因此命令中看到单引号而不是双引号时也不要感到奇怪 像大多数系统工具一样 t r也受特定字符的影响因此如果要匹配这些字符需使用反斜线屏蔽其特殊含义例如用\ {指定花括号左边可以屏蔽其特殊含义 表 tr中特定控制字符的不同表达方式 速记符含义八进制方式 \ a CtrlG 铃声\ \ b CtrlH 退格符\ \f CtrlL 走行换页\ \n CtrlJ 新行\ \ r CtrlM 回车\ \t CtrlI tab键\ \ v CtrlX \ 保存输出 要保存输出结果需将之重定向到一个文件下面的例子重定向输出到文件r e s u l t s t x t 输入文件是c o p s t x t 现在看一些例子 去除重复出现的字符 下面文件包含了一些打印错误这种情况时常发生例如在v i编辑器中偶尔按住一个键不放 如果要去除重复字母或将其压缩在一起使用 s选项因为都是字母故使用[ a z ]输入文件重定向到t r命令 所有重复字符被压缩成一个如果使用c a t命令再将结果管道输出至t r结果是一样的 删除空行 要删除空行可将之剔出文件下面是一个文件p l a n e t x t文本间有许多空行 使用 s来做这项工作换行的八进制表示为\ 命令为 也可以使用换行速记方式\ n这里用单引号(通常用双引号) 大写到小写 除了删除控制字符转换大小写是t r最常用的功能为此需指定即将转换的小写字符[ a z ] 和转换结果[ A Z ] 第一个例子t r从一个包含大小写字母的字符串中接受输入 同样也可以使用字符类[l o w e r]和[u p p e r] 将文本文件大写转换为小写并输出至一个新文件格式为 这里f i l e t o t r a n s l a t e保存即将转换的文件 n e w f i l e n a m e为保存结果的新文件名例如 小写到大写 转换小写到大写与上一节大写到小写过程刚好相反以下有两个例子 将文本文件从小写转换为大写并将结果存入一个新文件格式为 f i l e t o t r a n s l a t e保存即将转换的文件 n e w f i l e n a m e保存结果文件例如 删除指定字符 偶尔会从下载文件中删除只包含字母或数字的列需要结合使用 c和 s选项完成此功能 下面的文件包含一个星期的日程表任务是从其中删除所有数字只保留日期日期有大写也有小写格式因此需指定两个字符范围[ a z ]和[ A Z ]命令tr cs [az][AZ][\*]将文件每行所有不包含在[ a z ]或[ A Z ](所有希腊字母)的字符串放在字符串中并转换为一新行 s选项表明压缩所有新行 c表明保留所有字母不动原文件如下后跟t r命令 转换控制字符t r的第一个功能就是转换控制字符特别是从d o s向U N I X下载文件时忘记设置f t p关于回车换行转换的选项时更是如此 下面是故意没有设置转换开关的一个文本文件是关于文具需求的一部分内容使用c a t v显示控制字符 猜想^ ^ ^ ^ ^ ^是t a b键每一行以C t r l M结尾文件结尾C t r l Z以下是改动方法 使用 s选项查看A S C I I表^的八进制代码是 ^ M是 t a b键是 ^ Z是 下面将按步骤完成最终功能 用t a b键替换^ ^ ^ ^ ^ ^命令为 \ [ \ * ] 将结果重定向到临时工作文件s t a t t m p 用新行替换每行末尾的^ M并用\ n去除^ Z输入要来自于临时工作文件s t a t t m p 最后去除所有的控制字符文件就可以使用了 快速转换 如果需要删除文件中^ M并代之以换行使用命令 或者用下述命令得同样结果 也可以用下述命令 另一个一般的D o s到U N I X转换是命令 将删除所有^ M和^ Z代之以换行 要删除所有的t a b键代之以空格使用命令 替换p a s s w d文件中所有冒号代之以t a b键可以增加可读性将冒号引起来指定替换字符串中t a b键八进制值 下面是p a s s w d文件后跟t r命令结果 或者用下述命令得同样结果这里使用t a b键的速记符 匹配多于一个字符 可以使用[ c h a r a c t e r * n ]格式匹配多于一个字符下述文件列出系统硬盘信息其中包含了 系统已经注册的和未识别的第一列是数字如果不全是表明第二列相应硬盘已经注册 有时全部为看起来很烦人找个吸引人注意力的符号来代替它以便一眼就能看出哪个硬盘已注册哪个不可识别原文件如下 从文件列表中知道有一个硬盘未注册因此用星号代替所有的模式为[ * ]意即匹配至少个替换字符串为星号过滤命令及结果如下 现在从文件中可以直接看出哪个未注册 小结 t r主要用于字符转换或者抽取控制字符本章所有功能都可以用s e d来完成但有些人宁愿使用t r因为t r更加快捷容易 |