tr用法
时间:2010-09-30 来源:fzguon
一、tr命令介绍
tr命令主要用来从标准输入中通过替换或删除操作进行字符转换,然后打印输出到标准输出。可以通过管道或重定向标准输入来获得 tr 的输入数据。tr 对输入数据可以进行三种操作: 字符替换、压缩重复字符和删除字符。
tr命令格式:tr [OPTION] String1 [String2]
二、命令详细说明
1. 在tr中string1和string2用来指示一个字符集合范围。可以是下面的一些形式(一般要加双引号):
1) [a-d] : [a-d]表示abcd,常用的有[a-z]、[A-Z]、[0-9]等,[bfgh]表示 bfgh。可以加上单或双引号
2) [C*n] : 表示字符 C 重复出现指定次数n。因此,[F*3]表示FFF。一般只能出现在 string2中。
3) \nnn : 三位八进制数,对应有效的 ASCII 字符。一般用于表示特定的控制字符。
速记符 含义 八进制方式
\a Ctrl-G 铃声 \007
\b Ctrl-H 退格符 \010
\f Ctrl-L 走行换页 \014
\n Ctrl-J 新行 \012
\r Ctrl-M 回车 \015
\t Ctrl-I tab 键 \011
\v Ctrl-X \030
4) [:class_name:] : tr 支持使用内建的字符类别。常见的字符类别有:
[:alnum:] 字母、数字(0-9,a-z,A-Z)
[:alpha:] 字母(a-z,A-Z)
[:cntrl:] 控制字符
[:digital:] 数字(0-9)
[:graph:] 可打印的字符,不包含空格
[:lower:] 小写字母(a-z)
[:print:] 可打印的字符,包含空格
[:punct:] 标点符号
[:space:] 空格
[:upper:] 大写字母(A-Z)
[:xdigital:] 16 进制数字(0-9,a-f,A-F)
5) 普通字符串形式: 比如 aeiou、bdfgh 等。
2.选项"-c": 表示用在输入数据中出现,但是不包含在 string1 字符范围内的字符组成的集合,代替原来的 string1。在 tr 的三类操作中都可以使用选项"-c"。
eg: echo "adcfghg" | tr -cd fgca // 将显示 acfgg 输入数据中不包含在 string1 中的字符范围 是"dh" ,所以,实际上只是删除了字符"dh"
3.tr 用于字符替换: 只需要同时给出 string1 和 string2,可以需要不指定特别的选项。
1) Usage: tr string1 string2
输入数据中属于 string1 字符范围内的字符都将被替换,string1 中的第 n 个字符被替换为 string2 中的第 n个字符。
eg: echo "adcfgh" | tr adcgw vbnle // 将显示 vbnflh (v 替换 a,b 退回 d ,n 替换 c,l 替换 g...)
2) 一般 string1 和 string2 的字符个数应该相同。如果字符个数不同,分为两种情况:
① string1 的字符个数少于 string2 的字符个数: string2 种额外的字符将被忽略。
② string1 的字符个数多于 string2 的字符个数,又可分为两种情况:
·对于 BSD 系列的系统: tr 会重复 string2 中的最后一个字符,直到补齐到 string1 一样的长度。
·对于 System V 的系统 : tr 将截去 string1 中超长的部分。
GUN tr 使用 BSD 方式,如果想使用 System V 方式,需要指定选项"-t"。
eg: echo "addcfghg" | tr adcgw vbn // 将打印 vbbnfnhn
echo "addcfghg" | tr -t adcgw vbn // 将打印 vbbnfghg
3) tr 的字符替换操作主要用途有 大小写转换等。
eg: tr [a-z] [A-Z] < video.txt // 将文件 video.txt 中的所有小写字母转换成大写字母
tr ":" "\011" < /etc/passwd // 将 passwd 文件的域分隔符改为"\011"即"TAB"
4.tr 用于删除字符: 使用选项"-d"。
1) Usage: tr -d string1
输入数据中所有在 string1 中出现过的字符都将被删除。
2) echo "This is a note !"| tr -d [:space:] // 将打印 Thisisanote 即删除所有空格
tr -cd "[a-z][A-Z][\n]" <diary.txt // 文件 diary.txt 中非字母或回车的字符都将被删除
5.tr 用于压缩重复字符: 使用选项"-s"。压缩操作可以单独进行,也可以在替换操作或删除操作之后进行,因而分成 3 种情况:
1) Usage: tr -s string1
输入数据中连续出现的字符,只有还在 string1 中出现过的,才会将被压缩成一个字符。
eg: echo "aaaccdefffgghhh"| tr -s adeg // 将打印 accdefffghhh (string1 中无字符"cfh")
tr -s "\n" < plane.txt // 删除文件 plane.txt 中的空行 (即压缩回车符)
2) Usage: tr -s string1 string2
string1 和 string2 用于替换操作,string2 还用于压缩操作。
eg: tr -s "[\015\032]" "[\012*]" <input_file // 将文件 iput_file 从 dos 格式转换到 unix 格式
3) Usage: tr -ds string1 string2
string1 用于删除操作,string2 用于压缩操作。
eg: echo "aaaccdefffgghhh"| tr -ds adeg fh // 将打印 ccfh
echo "aaaccdefffgghhh"| tr -d adeg // 将打印 ccfffhhh
6.在 tr 的替换操作中,如果 string1 使用了中括号"[ ]",那么 string2 也应该使用"[ ]"。
7.tr 主要用于字符转换或者抽取控制字符。tr 的大多数功能都可以用 sed 来完成,但有些人宁愿使用 tr,因为tr 更加快捷、容易。