/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 实用程序可以在替换或删除选定字符的同时,将标准输入复制到标准输出。指定的选项以及 string1 和 string2 操作数控制复制多字符和单字符整理元素时发生的转换。
支持以下选项:
补充由 string1 指定的一组值。
补充由 string1 指定的一组字符串。
删除出现的所有由 string1 指定的输入字符。
将重复字符的实例替换为单个字符。
如果未指定 –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:]'
最后一个操作数的数组只包含定义为每个 toupper 或 tolower 字符对(视情况而定)中的第二个字符。(请参见 toupper(3C) 和 tolower(3C))。
如果用于 string1 或 string2 的字符串为空,则产生的结果不确定。
支持下列操作数:
转换控制字符串。每个字符串表示要转变为用于转换的字符数组的一组字符。
操作数 string1 和 string2(如果已指定)可以定义两个字符数组。可以使用以下列表中的结构指定多字符或单字符整理元素。如果任何结构指定的是多字符整理元素,则 tr 会从生成的数组中排除(不发出诊断消息)这些多字符元素。
以下各种转换均未提及的所有字符都表示其本身。
八进制序列可用于表示带有特定编码值的字符。八进制序列的结构是一个反斜杠后跟一位、两位或三位八进制字符 (01234567) 的最长序列。这种序列会导致将编码由一位、两位或三位八进制整数表示的字符置于数组中。多字节字符需要串联多个此类型的转义序列,其中每个字节包含前导 \。
支持反斜杠转义序列 \a、\b、\f、\n、\r、\t 和 \v。如果反斜杠后跟除八进制数字之外的其他任何字符,则产生的结果都不确定。
在 POSIX 语言环境中,这种结构表示两个范围端点(只要两个端点都不是 \octal 格式的八进制序列)之间(含)由整理序列定义的一系列整理元素。会将范围内的字符或整理元素按升序整理序列置于数组中。如果在整理序列中第二个端点在起始端点前面,则未指定是整理元素范围为空,还是将该结构视为无效。在除 POSIX 语言环境之外的语言环境中,该结构的行为不确定。
如果范围端点中的一个或两个同时为 \octal 格式的八进制序列,则表示两个范围端点之间(含)的一系列特定编码二进制值。
表示属于定义的字符类(由 LC_CTYPE 语言环境类别的当前设置定义)的所有字符。string1 中接受指定的以下字符类名称:
alnum blank digit lower punct upper alpha cntrl graph print space xdigit
此外,在那些已经在 LC_CTYPE 类别中为 name 关键字指定了 charclass 定义的语言环境中,可以识别 [:name:] 格式的字符类表达式。
如果同时指定了 –d 和 –s 选项,则 string2 中将接受任何字符类名称。否则,只有 lower 或 upper 在 string2 中有效,前提是必须在 string1 中的同一相对位置分别指定相应的字符类 upper 和 lower。此类规范解释为大小写转换请求。如果 [:lower:] 出现在 string1 中且 [:upper:] 出现在 string2 中,则数组将包含通过当前语言环境下 LC_CTYPE 类别中的 toupper 映射得到的字符。如果 [:upper:] 出现在 string1 中且 [:lower:] 出现在 string2 中,则数组将包含通过当前语言环境下 LC_CTYPE 类别中的 tolower 映射得到的字符。每对映射字符中的第一个字符在 string1 的数组中,每对映射字符中的第二个字符在 string2 的数组中同一相对位置。
但大小写转换除外,将字符类表达式指定的字符置于数组中的顺序不确定。
如果为 class 指定的名称并未在当前语言环境下定义有效的字符类,则产生的行为不确定。
表示按照 LC_COLLATE 语言环境类别当前设置的定义与 equiv 属于同一等效类的所有字符或整理元素。只有等效类表达式由 –d 和 –s 选项共同使用时,它才能在 string1 或 string2 中。将属于等效类的字符置于数组中的顺序不确定。
表示字符 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)。
以下示例将在 file1 中创建所有字词的列表,在 file2 中每行创建一个字词,其中每个字词被视为最大的字母字符串。
tr −cs "[:alpha:]" "[\n*]" <file1 >file2示例 2 转换字符
以下示例会将 file1 中的所有小写字符转换为大写字符,并将结果写入标准输出。
tr "[:lower:]" "[:upper:]" <file1
请注意,XPG3 的相应示例中显示的警告不再有效。这种大小写转换现在是一个特例,利用 tolower 和 toupper 分类来确保完成适当的映射(如果正确定义了语言环境)。
示例 3 找出等效字符以下示例使用等效类在 file1 中找出基本字符 e 的重音变体,可除去其变音符并将其写入 file2。
tr "[=e=]" e <file1 >file2
有关影响 tr 执行的环境变量 LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES 和 NLSPATH 的说明,请参见 environ(5)。
将返回以下退出值:
所有输入都已成功处理。
出现错误。
有关下列属性的说明,请参见 attributes(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 字符。