手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

tr(1)

名称

tr - 转换字符

用法概要

/usr/bin/tr [-cds] [string1 [string2]]
/usr/xpg4/bin/tr [-cs] string1 string2
/usr/xpg4/bin/tr -s | -d [-c] string1
/usr/xpg4/bin/tr -ds [-c] string1 string2
/usr/xpg6/bin/tr [-c | -C] [-s] string1 string2
/usr/xpg6/bin/tr -s [-c | -C] string1
/usr/xpg6/bin/tr -d [-c | -C] string1
/usr/xpg6/bin/tr -ds [-c | -C] string1 string2

描述

tr 实用程序可以在替换或删除选定字符的同时,将标准输入复制到标准输出。指定的选项以及 string1string2 操作数控制复制多字符和单字符整理元素时发生的转换。

选项

支持以下选项:

–c

补充由 string1 指定的一组值。

–C

补充由 string1 指定的一组字符串。

–d

删除出现的所有由 string1 指定的输入字符。

–s

将重复字符的实例替换为单个字符。

如果未指定 –d 选项:

  • string1 指定的数组中找到的每个输入字符都将替换为 string2 指定的数组中同一相对位置的字符。如果 string2 指定的数组比 string1 指定的数组短,则产生的结果不确定。

  • 如果指定了 –c 选项,则会将 string1 指定的值的补集按二进制值升序顺序置于数组中。

  • 如果指定了 –C 选项,则会将 string1 指定的字符的补集(按照 LC_CTYPE 当前设置的定义,除在 string1 操作数中实际指定的字符以外,当前字符集中所有字符的组合)按升序整理序列(由 LC_COLLATE 的当前设置定义)置于数组中。

  • 由于字符类表达式或等效类表达式指定的字符的顺序不确定,因此仅当要将多个字符映射到一个字符时,才能使用此类表达式。前面已经提到,大小写转换除外。

如果指定了 –d 选项:

  • 将删除在 string1 指定的数组中找到的输入字符。

  • 如果同时指定了 –C 选项和 –d 选项,则删除由 string1 指定的值以外的所有值。除非也指定了 –s 选项,否则将忽略 string2 的内容。

  • 如果指定了 –c 选项,则会将 string1 指定的值的补集按二进制值升序顺序置于数组中。

  • 同一字符串不能同时用于 –d–s 选项。如果同时指定了这两个选项,则同时需要 string1(用于删除)和 string2(用于压缩)。

如果指定了 –s 选项,执行任何删除或转换后,如果在最后一个操作数指定的数组中找到了重复字符,会将同一字符的重复序列替换为出现一次。如果最后一个操作数包含字符类,如以下示例:

tr -s '[:space:]'

最后一个操作数的数组将包含该字符类中的所有字符。但是,前面已经提到,执行如下大小写转换时:

tr -s '[:upper:]' '[:lower:]'

最后一个操作数的数组只包含定义为每个 touppertolower 字符对(视情况而定)中的第二个字符。(请参见 toupper(3C)tolower(3C))。

如果用于 string1string2 的字符串为空,则产生的结果不确定。

操作数

支持下列操作数:

string1
string2

转换控制字符串。每个字符串表示要转变为用于转换的字符数组的一组字符。

操作数 string1string2(如果已指定)可以定义两个字符数组。可以使用以下列表中的结构指定多字符或单字符整理元素。如果任何结构指定的是多字符整理元素,则 tr 会从生成的数组中排除(不发出诊断消息)这些多字符元素。

character

以下各种转换均未提及的所有字符都表示其本身。

\octal

八进制序列可用于表示带有特定编码值的字符。八进制序列的结构是一个反斜杠后跟一位、两位或三位八进制字符 (01234567) 的最长序列。这种序列会导致将编码由一位、两位或三位八进制整数表示的字符置于数组中。多字节字符需要串联多个此类型的转义序列,其中每个字节包含前导 \。

\character

支持反斜杠转义序列 \a\b\f\n\r\t\v。如果反斜杠后跟除八进制数字之外的其他任何字符,则产生的结果都不确定。

/usr/xpg4/bin/tr

c-c

/usr/bin/tr

[c-c]

在 POSIX 语言环境中,这种结构表示两个范围端点(只要两个端点都不是 \octal 格式的八进制序列)之间(含)由整理序列定义的一系列整理元素。会将范围内的字符或整理元素按升序整理序列置于数组中。如果在整理序列中第二个端点在起始端点前面,则未指定是整理元素范围为空,还是将该结构视为无效。在除 POSIX 语言环境之外的语言环境中,该结构的行为不确定。

如果范围端点中的一个或两个同时为 \octal 格式的八进制序列,则表示两个范围端点之间(含)的一系列特定编码二进制值。

[:class:]

表示属于定义的字符类(由 LC_CTYPE 语言环境类别的当前设置定义)的所有字符。string1 中接受指定的以下字符类名称:


alnum  blank  digit  lower  punct  upper
alpha  cntrl  graph  print  space  xdigit

此外,在那些已经在 LC_CTYPE 类别中为 name 关键字指定了 charclass 定义的语言环境中,可以识别 [:name:] 格式的字符类表达式。

如果同时指定了 –d–s 选项,则 string2 中将接受任何字符类名称。否则,只有 lowerupperstring2 中有效,前提是必须在 string1 中的同一相对位置分别指定相应的字符类 upperlower。此类规范解释为大小写转换请求。如果 [:lower:] 出现在 string1 中且 [:upper:] 出现在 string2 中,则数组将包含通过当前语言环境下 LC_CTYPE 类别中的 toupper 映射得到的字符。如果 [:upper:] 出现在 string1 中且 [:lower:] 出现在 string2 中,则数组将包含通过当前语言环境下 LC_CTYPE 类别中的 tolower 映射得到的字符。每对映射字符中的第一个字符在 string1 的数组中,每对映射字符中的第二个字符在 string2 的数组中同一相对位置。

但大小写转换除外,将字符类表达式指定的字符置于数组中的顺序不确定。

如果为 class 指定的名称并未在当前语言环境下定义有效的字符类,则产生的行为不确定。

[=equiv=]

表示按照 LC_COLLATE 语言环境类别当前设置的定义与 equiv 属于同一等效类的所有字符或整理元素。只有等效类表达式由 –d–s 选项共同使用时,它才能在 string1string2 中。将属于等效类的字符置于数组中的顺序不确定。

[x*n]

表示字符 x 重复出现 n 次。由于该表达式用于将多个字符映射到一个字符,因此只有出现在 string2 中时才有效。如果 n 带有前导 0,则会将其解释为八进制值。否则,将其解释为十进制值。

如果省略 n 或它为 0,则 /usr/bin/tr 会将其解释为极大的值;/usr/xpg4/bin/tr/usr/xpg6/bin/tr 会将其解释为足够大的值,以便将基于 string2 的序列扩展到基于 string1 的序列的长度。

用法

有关 tr 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)

示例

示例 1 创建字词列表

以下示例将在 file1 中创建所有字词的列表,在 file2 中每行创建一个字词,其中每个字词被视为最大的字母字符串。

tr −cs "[:alpha:]" "[\n*]" <file1 >file2
示例 2 转换字符

以下示例会将 file1 中的所有小写字符转换为大写字符,并将结果写入标准输出。

tr "[:lower:]" "[:upper:]" <file1

请注意,XPG3 的相应示例中显示的警告不再有效。这种大小写转换现在是一个特例,利用 tolowertoupper 分类来确保完成适当的映射(如果正确定义了语言环境)。

示例 3 找出等效字符

以下示例使用等效类在 file1 中找出基本字符 e 的重音变体,可除去其变音符并将其写入 file2

tr "[=e=]" e <file1 >file2

环境变量

有关影响 tr 执行的环境变量 LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES 和 NLSPATH 的说明,请参见 environ(5)

退出状态

将返回以下退出值:

0

所有输入都已成功处理。

>0

出现错误。

属性

有关下列属性的说明,请参见 attributes(5)

/usr/bin/tr

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)

/usr/xpg4/bin/tr

属性类型
属性值
可用性
system/xopen/xcu4
CSI
Enabled(已启用)
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

/usr/xpg6/bin/tr

属性类型
属性值
可用性
system/xopen/xcu6
CSI
Enabled(已启用)
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

另请参见

ed(1)sed(1)sh(1)tolower(3C)toupper(3C)ascii(5)attributes(5)environ(5)largefile(5)regex(5)standards(5)

附注

与以前的某些版本不同,/usr/xpg4/bin/tr 可以正确处理输入流中的 NUL 字符。可以使用 tr –d '\000' 除去 NUL 字符。