tr - Man Page

translate or delete characters

Examples (TL;DR)




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


display this help and exit


output version information and exit

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


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




audible BEL




form feed


new line




horizontal tab


vertical tab


all characters from CHAR1 to CHAR2 in ascending order


in ARRAY2, copies of CHAR until length of ARRAY1


REPEAT copies of CHAR, REPEAT octal if starting with 0


all letters and digits


all letters


all horizontal whitespace


all control characters


all digits


all printable characters, not including space


all lower case letters


all printable characters, including space


all punctuation characters


all horizontal or vertical whitespace


all upper case letters


all hexadecimal digits


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.


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.


Written by Jim Meyering.

Reporting Bugs

GNU coreutils online help: <>
Report any translation bugs to <>

See Also

Full documentation <>
or available locally via: info '(coreutils) tr invocation'

Referenced By

gpac-filters(1), pass(1), perlop(1), proc(5), rumakeindex(1), sed(1), shtool-table(1).

April 2024 GNU coreutils 9.5