- Replace all occurrences of a character in a file, and print the result:
tr find_character replace_character < path/to/file
- Replace all occurrences of a character from another command's output:
echo text | tr find_character replace_character
- Map each character of the first set to the corresponding character of the second set:
tr 'abcd' 'jkmn' < path/to/file
- Delete all occurrences of the specified set of characters from the input:
tr -d 'input_characters' < path/to/file
- Compress a series of identical characters to a single character:
tr -s 'input_characters' < path/to/file
- Translate the contents of a file to upper-case:
tr "[:lower:]" "[:upper:]" < path/to/file
- Strip out non-printable characters from a file:
tr -cd "[:print:]" < path/to/file
tr [OPTION]... STRING1 [STRING2]
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)
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 horizontal whitespace
all control characters
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.
GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Report any translation bugs to <https://translationproject.org/team/>
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.
Full documentation <https://www.gnu.org/software/coreutils/tr>
or available locally via: info '(coreutils) tr invocation'
gpac-filters(1), pass(1), perlop(1), proc(5), rumakeindex(1), sed(1), shtool-table(1).