TR(1)

NAME
tr - translate or delete characters

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

DESCRIPTION

Translate, squeeze, and/or delete characters from standard input, writing to standard output. STRING1 and STRING2 specify arrays of characters 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 character

-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 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  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 appear. -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 unspecified order; while translating, '[:lower:]' and '[:upper:]' may be used in pairs to specify case conversion. Squeezing occurs after translation or deletion. Arguments like '[...]' should be quoted, to avoid potential shell globbing.

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
Report bugs to: bug-coreutils@gnu.org
GNU coreutils home page: <https://www.gnu.org/software/coreutils/>
General help using GNU software: <https://www.gnu.org/gethelp/>
Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT
Copyright © 2026 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'