TR(1) User Commands TR(1)

# [NAME](#NAME)

tr - translate or delete characters

# [SYNOPSIS](#SYNOPSIS)

**tr** \[*OPTION*]... *STRING1* \[*STRING2*]

# [DESCRIPTION](#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**](#c,)

use the complement of ARRAY1

[**-d, --delete**](#d,)

delete characters in ARRAY1, do not translate

[**-s, --squeeze-repeats**](#s,)

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**](#t,)

first truncate ARRAY1 to length of ARRAY2

[**--help**](#help)

display this help and exit

[**--version**](#version)

output version information and exit

ARRAYs are specified as strings of characters. Most represent themselves. Interpreted sequences are:

[\\NNN](#NNN)

character with octal value NNN (1 to 3 octal digits)

\\\\

backslash

[\\a](#a)

audible BEL

[\\b](#b)

backspace

[\\f](#f)

form feed

[\\n](#n)

new line

[\\r](#r)

return

[\\t](#t)

horizontal tab

[\\v](#v)

vertical tab

[CHAR1-CHAR2](#CHAR1)

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](#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](#AUTHOR)

Written by Jim Meyering.

# [REPORTING BUGS](#REPORTING_BUGS)

Report bugs to: &lt;bug-coreutils@gnu.org&gt;.  
Report any translation bugs to: &lt;https://translationproject.org/team/&gt;.  
GNU coreutils home page: &lt;https://www.gnu.org/software/coreutils/&gt;  
General help using GNU software: &lt;https://www.gnu.org/gethelp/&gt;

# [COPYRIGHT](#COPYRIGHT)

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

# [SEE ALSO](#SEE_ALSO)

Full documentation &lt;https://www.gnu.org/software/coreutils/tr&gt;  
or available locally via: info '(coreutils) tr invocation'

September 2026 GNU coreutils 9.12

---

Document: tr(1) from coreutils 9.12-r3 (Chainguard OS)
Source: https://git.savannah.gnu.org/git/coreutils.git
