http://yonghui702.blog.163.com/blog/static/81718342011522112633462/ 文件test内容 Gaoyu,zhangyupan,wangxiuling,dingzupeng Gaoyu,duhongxian,caowei Gaoyu,zhangyupan,dingzupeng 要求把上面文件内容变成竖着的方式 Gaoyu zhangyupan wangxiuling 第一种方法 for user in $(echo `cat test |sed 's/,/ /g'`);do echo $user;done|sort|uniq 第二种方法 cat test| tr -s "," "\n" 一、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]" 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*]" 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 更加快捷、容易。