国际访客建议访问 Primers 编程伙伴 国际版站点 > Bash 教程 > tr 以获得更好的体验。

# Bash 的 tr 命令

tr [OPTION]... STRING1 [STRING2]

!subtitle:功能

对标准输入中的字符进行翻译、压缩、删除,然后写入标准输出。

!subtitle:类型

可执行文件(/usr/bin/tr),属于 coreutils

!subtitle:参数

  • OPTION 选项:

    • -c, -C, --complement - 转换 STRING1 中不包含的字符

    • -d, --delete - 删除 STRING1 中的字符

    • -s, --squeeze-repeats - 将最后一个参数指定的字符去重

    • -t, --truncate-set1 - 首先将 STRING1 的长度截断至和 STRING2 一样

    • --help - 显示帮助

    • --version - 显示版本

  • STRING1 - 控制字符串列表1

  • STRING2 - 控制字符串列表2

# 特殊字符

转义或表示法 含义
\NNN 八进制值为 NNN 的字符(1 到 3 个八进制数字)
\\ 反斜杠
\a 可听的 BEL(响铃)
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表符
CHAR1-CHAR2 从 CHAR1 到 CHAR2 的所有字符(按升序)
[CHAR*] 在 ARRAY2 中复制 CHAR,直到 ARRAY1 的长度
[CHAR*REPEAT] 复制 CHAR REPEAT 次,如果 REPEAT 以 0 开头,则为八进制
[:alnum:] 所有字母和数字
[:alpha:] 所有字母
[:blank:] 所有水平空白字符
[:cntrl:] 所有控制字符
[:digit:] 所有数字
[:graph:] 所有可打印字符(不包括空格)
[:lower:] 所有小写字母
[:print:] 所有可打印字符(包括空格)
[:punct:] 所有标点符号
[:space:] 所有水平或垂直空白字符
[:upper:] 所有大写字母
[:xdigit:] 所有十六进制数字
[=CHAR=] 与 CHAR 等价的所有字符

# 示例

$ echo "a b c" | tr ' ' '\n'        # 将空格替换为换行
a
b
c
$ echo "a b c" | tr 'abc' 'efg'     # 将 'abc' 依次替换为 'efg'
e f g
$ echo "a b c" | tr -c 'ac' '-'     # 将 'ac' 以外的字符替换为 '-'
a---c-
$ echo "a b c" | tr -d 'a'          # 删除 'a'
 b c
$ echo "aaa bbb ccc" | tr -d 'b'    # 去重 'b'
aaa  ccc

# 推荐阅读

# 手册

TR(1)                            User Commands                           TR(1)

NAME
       tr - translate or delete characters

SYNOPSIS
       tr [OPTION]... STRING1 [STRING2]

DESCRIPTION
       Translate, squeeze, and/or delete characters from standard input, writ‐
       ing  to standard output.  STRING1 and STRING2 specify arrays of charac‐
       ters ARRAY1 and ARRAY2 that control the action.

       -c, -C, --complement
              use the complement of ARRAY1

       -d, --delete
              delete characters in ARRAY1, do not translate

       -s, --squeeze-repeats
              replace each sequence of a repeated character that is listed  in
              the last specified ARRAY, with a single occurrence of that char‐
              acter

       -t, --truncate-set1
              first truncate ARRAY1 to length of ARRAY2

       --help display this help and exit

       --version
              output version information and exit

       ARRAYs  are  specified  as strings of characters.  Most represent them‐
       selves.  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 ARRAY2, copies of CHAR until length of ARRAY1

       [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

       [=CHAR=]
              all characters which are equivalent to CHAR

       Translation occurs if -d is not given and both STRING1 and STRING2  ap‐
       pear.   -t is only significant when translating.  ARRAY2 is extended to
       length of ARRAY1 by repeating its last character as necessary.   Excess
       characters of ARRAY2 are ignored.  Character classes expand in unspeci‐
       fied  order;  while translating, [:lower:] and [:upper:] may be used in
       pairs to specify case conversion.  Squeezing occurs  after  translation
       or deletion.

BUGS
       Full  support  is available only for safe single-byte locales, in which
       every possible input byte represents a single character.  The C  locale
       is  safe  in  GNU  systems, so you can avoid this issue in the shell by
       running LC_ALL=C tr instead of plain tr.

AUTHOR
       Written by Jim Meyering.

REPORTING BUGS
       GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
       Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT
       Copyright © 2023 Free Software Foundation, Inc.   License  GPLv3+:  GNU
       GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
       This  is  free  software:  you  are free to change and redistribute it.
       There is NO WARRANTY, to the extent permitted by law.

SEE ALSO
       Full documentation <https://www.gnu.org/software/coreutils/tr>
       or available locally via: info '(coreutils) tr invocation'

GNU coreutils 9.4                 April 2024                             TR(1)
本文 更新于: 2026-03-06 09:52:35 创建于: 2026-03-06 09:52:35