tr

translate characters

TLDR

Replace all occurrences of a character in a file, and print the result

$ tr [find_character] [replace_character] < [filename]
copy


Replace all occurrences of a character from another command's output
$ echo [text] | tr [find_character] [replace_character]
copy


Map each character of the first set to the corresponding character of the second set
$ tr '[abcd]' '[jkmn]' < [filename]
copy


Delete all occurrences of the specified set of characters from the input
$ tr -d '[input_characters]' < [filename]
copy


Compress a series of identical characters to a single character
$ tr -s '[input_characters]' < [filename]
copy


Translate the contents of a file to upper-case
$ tr "[:lower:]" "[:upper:]" < [filename]
copy


Strip out non-printable characters from a file
$ tr -cd "[:print:]" < [filename]
copy

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 may be used only 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.

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.

REPORTING BUGS

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

COPYRIGHT

Copyright © 2022 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'

AUTHOR

Written by Jim Meyering.

Copied to clipboard