linux的tr命令
tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换。
语法
tr [ -c | -cds | -cs | -C | -Cds | -Cs | -ds | -s] [ -A] String1 String2
tr { -cd | -cs |-Cd | -Cs | -d| -s} [ -A] String1
说明:
tr 命令从标准输入删除或替换字符,并将结果写入标准输出。根据由 String1 和 String2 变量指定的字符串以及指定的标志,tr 命令可执行三种操作:
1)转换字符
如果 String1 和 String2 两者都已指定,但无 -d 标志,则 tr 命令会在标准输入中将 String1 中所包含的每一个字符都替换成 String2 中相同位置上的字符,注意位置对应,String1中的第一个被String2中的第一个替换,
前后一一对应:
$ echo "aaabbbcccdddeeefffabc" | tr 'abd' 'xyy' 
 结果:xxxyyycccyyyeeefffxyc
如果个数不符合,则前后的多余字符分两种:
一,后面多无操作,只换前两个:
echo "hhhtttvvv" | tr 'hv' 'wpt'
结果:wwwtttppp。t字符没有操作。
二,前面多,则除了前面一一对应后,剩下的同意由string2最后一个字符替换:
echo "aaabbbcccdddeeefff" | tr 'abc' 'xy' 
 结果:xxxyyyyyydddeeefff
2)-d 标志为删除字符操作,tr 命令会在标准输入中删除 String1 中包含的每一个字符。没有则不操作。
3)用 -s 标志压缩重复字符串
-s 标志,会压缩字符串中的重复出现的字符,比如:
echo "aaabbbcccdddeeefffabc" | tr -s 'abd'
 结果:abcccdeeefffabc
当有两个参数时,则先进行压缩,再进行替换:
echo "aaabbbcccdddeeefffabc" | tr -s 'acd' 'fy' 
 结果fbbbyeeefby
(注意,前多后少,所以除了一一对应的,string1多余的都是使用string2最后一个替换,如cd都用y。)
命令参数:
-t: truncate,将String1用String2转换,缺省为-t;默认tr执行转换命令
-d:delete,参数只有String1,进行删除
 -s: squeeze-repeats,压缩重复出现的字符,并用2中的字符替换1中。
-c:complement,用String2替换Sring1中没有包含的字符
echo "aaabbbcccdddeeefffabc" | tr -c 'a' 'x'    
 结果:aaaxxxxxxxxxxxxxxxaxxx
-C man中说和-c功能一样。(网络上说:指定 String1 值用 String1 所指定的字符串的补码替换。String1 的补码是当前语言环境的字符集中的所有字符,除了由 String1 指定的字符以外。如果指定了 -A 和 -c 标志都已指定,则与所有 8 位字符代码集合有关的字符将被补足。如果指定了 -c 和 -s 标志,则 -s 标志适用于 String1 的补码中的字符。 如果没有指定 -d 选项,则由 String1 指定的字符的补码将放置到升序排列的数组中(如 LC_COLLATE 的当前设置所定义)。)
-A 使用范围和字符类 ASCII 整理顺序、一个字节一个字节地执行所有操作,而不是使用当前语言环境整理顺序。
Strings are specified as strings of characters. Most represent themselves.
 Interpreted sequences are:
\NNN character with octal value NNN (1 to 3 octal digits)
 \\ backslash 转义字符
 \a audible BEL 警报铃
 \b backspace 删除
 \f form feed 
 \n new line 回车换行
 \r return
 \t horizontal tab
 \v vertical tab
 CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order
 [CHAR*] in String2, copies of CHAR until length of String1
 [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0
 [:alnum:] all letters and digits 字符数字
 [:alpha:] all letters字符
 [:blank:] all horizontal whitespace 水平空格
 [:cntrl:] all control characters控制符
 [:digit:] all digits 数字
 [:graph:] all printable characters, not including space
 [:lower:] all lower case letters 小写
 [:print:] all printable characters, including space
 [:punct:] all punctuation characters
 [:space:] all horizontal or vertical whitespace 横竖空白
 [:upper:] all upper case letters 大写
 [:xdigit:] all hexadecimal digits 16进制数
 [=CHAR=] all characters which are equivalent to CHAR
以下引自网络:
表达字符串的特殊序列
String1 和 String2 变量中所包含的字符串可以使用以下的约定来表示:
| C1-C2 | 指定了 C1 所指定的字符和 C2 所指定的字符之间(包括 C1 和 C2)进行整理的字符串。C1 所指定的字符必须整理放在由 C2 所指定的字符之前。
 
      注:
      
      在使用本方法指定子范围时,当前语言环境对结果有重要影响。如果需要用命令来产生与语言环境无关的一致结果,则应该避免使用子范围。
      
 | 
| [C*Number] | Number 是一个整数,它指定了由 C 所指定的字符的重复次数。除非其首位数字是 0,否则 Number 一律视为是十进制整数;如果首位数字是 0,则视为八进制整数。 | 
| [C*] | 用 C 指定的字符填写字符串。该选项只用于包含在 String2 中的字符串末尾,它强制 String2 中的字符串具有与由 String1 变量所指定的字符串一样的字符数。*(星号)后面指定的任何字符都被忽略。 | 
| [ :ClassName: ] | 指定由当前语言环境中的 ClassName 所命名的字符类中的所有字符。类名可以是下述名称中的任何一种:
alnum lower 除 [:lower:] 和 [:upper:] 转换字符类之外,其它字符类指定的字符都按未指定的顺序放入数组中。由于未定义字符类指定的字符的顺序,仅当目的为将多个字符映射为一个时才使用这些字符。转换字符类除外。 有关字符类的详细情况,请参阅 ctype 子例程。  | 
| [ =C= ] | 指定所有的字符具有与 C 所指定的字符相同的等价类。 | 
| \Octal | 指定字符,其编码由 Octal 所指定的八进制值表示。Octal 可以是 1 位、2 位 或 3 位八进制整数。空字符可以用 '\0' 表示,并可以像任何其它的字符那样进行处理。 | 
| \ControlCharacter | 指定与 ControlCharacter 所指定的值相应的控制字符。可以表示以下值:
  | 
| \\ | 规定 "\"(反斜杠)就是作反斜杠使用,而无作为转义字符的任何特殊意义。 | 
| \[ | 指定“[”(左括号)就作为左括号使用,而无作为特定字符串序列的开始字符的任何特殊意义。 | 
| \- | 指定“-”(负号)就作为负号使用,而无作为范围分隔符的任何特殊意义。 | 
退出状态
该命令返回以下出口值:0,输入处理成功;>0 处理产生错误。
示例
- 若要将大括号转换为小括号,请输入:tr '{}' '()' < textfile > newfile
这便将每个 {(左大括号)转换成 ((左小括号),并将每个 }(右大括号)转换成 )(右小括号)。所有其它的字符都保持不变。
 - 若要将大括号转换成方括号,请输入:tr '{}' '\[]' < textfile > newfile
这便将每个 {(左大括号)转换成 [(左方括号),并将每个 }(右大括号)转换成 ](右方括号)。左方括号必须与一个 "\"(反斜扛)转义字符一起输入。
 - 若要将小写字符转换成大写,请输入:tr 'a-z' 'A-Z' < textfile > newfile
 - 若要创建一个文件中的单词列表,请输入:
tr -cs '[:lower:][:upper:]' '[\n*]' < textfile > newfile
这便将每一序列的字符(除大、小写字母外)都转换成单个换行符。*(星号)可以使 tr 命令重复换行符足够多次以使第二个字符串与第一个字符串一样长。
 - 若要从某个文件中删除所有空字符,请输入:
tr -d '\0' < textfile > newfile
 - 若要用单独的换行替换每一序列的一个或多个换行,请输入:
tr -s '\n' < textfile > newfile
或
tr -s '\012' < textfile > newfile
 - 若要以“?”(问号)替换每个非打印字符(有效控制字符除外),请输入:
tr -c '[:print:][:cntrl:]' '[?*]' < textfile > newfile
这便对不同语言环境中创建的文件进行扫描,以查找当前语言环境下不能打印的字符。
 - 要以单个“#”字符替换 <space> 字符类中的每个字符序列,请输入:
tr -s '[:space:]' '[#*]'
 
一些不错的小例子
 1、去除重复的字符
 #将连续的几个相同字符压缩为一个字符
 $ echo aaacccddd | tr -s [a-z]
 acd
 $ echo aaacccddd | tr -s [abc]
 acddd
2、删除空白行
 #删除空白行就是删除换行符/n
 #注意:这些空白行上只有回车符,没有空格符,这里用换行符的转义字符\n
 #注意:此处用-s删除了多余的换行符,如果用-d,则会删除所有的换行符 
 $ cat test.txt | tr -s ["\n"]
#也可以用八进制符\012,\012与\n都是换行符
 $ cat test.txt | tr -s "[\012]"
3、大小写相互转换
 #将语句中所有的小写字母变成大写字母,其中-t可省略
 $ echo "Hello World I Love You" |tr -t [a-z] [A-Z]
 HELLO WORLD I LOVE YOU
 #将语句中所有的大写字母变成小写字母
 $ echo "Hello World I Love You" |tr [A-Z] [a-z]
 hello world i love you
 #也可以利用字符类进行转换
 #[:lower:]代表小写字母,[:upper:]代表大写字母
 $ echo "Hello World I Love You" |tr [:lower:] [:upper:]
 HELLO WORLD I LOVE YOU
4、删除指定的字符
 $ cat test.txt
 Monday 09:00
 Tuesday 09:10
 Wednesday 10:11
 Thursday 11:30
 Friday 08:00
 Saturday 07:40
 Sunday 10:00
 #现在要删除处理星期之外的所有字符
 #-d代表删除,[0-9]代表所有的数字,[: ]代表冒号和空格
 $ cat test.txt | tr -d "[0-9][: ]"
 Monday
 Tuesday
 Wednesday
 Thursday
 Friday
 Saturday
 Sunday
5、利用-c进行补集的替换
 #有时候在文本中我们只知道要保留的一些字符,其他字符种类繁多,就可以使用补集的替换
 $ cat test.txt
 Monday 09:00
 Tuesday 09:10
 Wednesday 10:11
 Thursday 11:30
 Friday 08:00
 Saturday 07:40
 Sunday 10:00
 #我们只需要星期,则思路就是除了字母,其他统统替换掉
 #这里,-c:用换行符替换掉除了字母外的所有字符;-s:删除多余的换行符
 cat test.txt|tr -cs "[a-z][A-Z]" "\n"
 Monday
 Tuesday
 Wednesday
 Thursday
 Friday
 Saturday
 Sunday
linux的tr命令的更多相关文章
- Linux shell tr 命令详解
		
该随笔摘自 https://www.jb51.net/article/103892.htm Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删 ...
 - Linux:tr命令详解
		
tr tr命令可以对来自标准输入的字符进行替换.压缩和删除 语法 tr(选项)(SET1 SET2) 选项 -c或——complerment:取代所有不属于第一字符集的字符: -d或——delete: ...
 - Linux中 tr 命令详解
		
tr - translate or delete characters 主要用于转换和删除字符 带有最常用选项的t r命令格式为:tr -c -d -s [ "string1_to_tran ...
 - Linux之tr命令
		
tr - translate or delete characters 删除或替换文字信息 参数: -d 删除字符串 -s 删除重复的字符串只保留一个 [root@BASE ~]# cat c.t ...
 - linux sort,uniq,cut,wc,tr命令详解
		
sort是在Linux里非常常用的一个命令,对指定文件进行排序.去除重复的行 sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sor ...
 - 《tr命令-优化版》-linux命令五分钟系列之二十五
		
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
 - 《tr命令》-linux命令五分钟系列之六
		
本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...
 - linux系统之tr命令
		
tr命令介绍以及使用 目录: 1.tr命令的介绍 2.tr命令格式 3tr命令使用项. 4.常见的tr命令的使用 tr命令介绍 从标准输入中翻译.压缩和/或删除字符,写入标准输出,说白了就转换和删除字 ...
 - 【Linux基础】tr命令替换和删除字符
		
1.tr命令 tr可以对来自标准输入的字符进行替换.压缩和删除,可以将一组字符变成另外一组字符.通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其 ...
 
随机推荐
- hdu 5014 思维题/推理
			
http://acm.hdu.edu.cn/showproblem.php?pid=5014 从小数開始模拟找方法规律,然后推广,尤其敢猜敢尝试,错了一种思路继续猜-----这是一种非常重要的方法啊 ...
 - C++学习之路—继承与派生(一):基本概念与基类成员的访问属性
			
(本文根据<c++程序设计>(谭浩强)总结而成,整理者:华科小涛@http://www.cnblogs.com/hust-ghtao,转载请注明) 1 基本思想与概念 在传统的程序设计 ...
 - 了解sota字符界面(章节4.1)
			
4 SOTA操作 4.1 SOTA字符界面 sotaCC是字符界面管理sota系统程序 . 在/.../sota/bin/目录下,启动sotaCC.在终端的该目录下输入指令“./sotaCC”,启动s ...
 - Android调用系统相机、自己定义相机、处理大图片
			
Android调用系统相机和自己定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,而且因为涉及到要把拍到的照片显示出来,该样例也会涉及到Android载入大图片时候的处 ...
 - Codeforces 282E Sausage Maximization(字典树)
			
题目链接:282E Sausage Maximization 题目大意:给定一个序列A.要求从中选取一个前缀,一个后缀,能够为空,当时不能重叠.亦或和最大. 解题思路:预处理出前缀后缀亦或和,然后在字 ...
 - FastDFS概要
			
本篇文章是我上级老大所写. 留在这里为了不弄丢. FastDFS是一款开源的轻量级分布式文件系统 纯C实现,支持Linux, FreeBSD等UNIX系统 类google FS, 不是通用的文件系统, ...
 - 积累的VC编程小技巧之打印相关
			
1.修改打印预览的ToolBar 为AFX_IDD_PREVIEW_TOOLBAR这个ID创建一个DialogBar.则系统就会用新创建的DialogBar代替系统默认的那个 2.关于打印 1.要打印 ...
 - 移植一个开源点餐网到SAE平台上
			
记得以前我准备弄个点餐网的,但是由于一些原因没有做下去. 前几天将网上的一个点餐源码移植到了SAE上,网址http://diancan4sae.sinaapp.com. 我想做个外卖网,先选一个学校周 ...
 - Delphi的指针 good
			
Pointers are like jumps, leading wildly from one part of the data structure to another. Their introd ...
 - URL加随机数的作用
			
原文:URL加随机数的作用 大家在系统开发中都可能会在js中用到ajax或者dwr,因为IE的缓存,使得我们在填入相同的值的时候总是使用IE缓存,为了解决这个问题一般可以用一下方法: 1 ...