日期:2014-05-16 浏览次数:20806 次
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 命令可执行三种操作:
如果 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
-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