日期:2014-05-16  浏览次数:20806 次

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 命令从标准输入删除或替换字符,并将结果写入标准输出。根据由 String1String2 变量指定的字符串以及指定的标志,tr 命令可执行三种操作:

1)转换字符

如果 String1String2 两者都已指定,但无 -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 hor