tr (short for translate) is a useful command line utility that translates and/or deletes characters from stdin input and writes to stdout. It is a useful program for manipulating text on the command line.
This article will explain some useful tr command examples for Linux newbies.
The syntax for running the tr command is as follows, where characters in SET1 are translated to characters in SET2.
$ tr flags [SET1] [SET2]
Linux tr Command Examples
1. A simple tr command use case is to change all lowercase letters in the text to uppercase and vice versa, as shown below.
$ cat linux.txt linux is my life linux has changed my life linux is best and everthing to me..:)
$ cat linux.txt | tr [:lower:] [:upper:] LINUX IS MY LIFE LINUX HAS CHANGED MY LIFE LINUX IS BEST AND EVERTHING TO ME..:)
2. Alternatively, you can use the following command to change all lowercase letters to uppercase in a file as shown.
$ cat linux.txt | tr [a-z] [A-Z] LINUX IS MY LIFE LINUX HAS CHANGED MY LIFE LINUX IS BEST AND EVERTHING TO ME..:)
3. To save the results written to stdout in a file for later processing, use the shell’s output redirection feature (>)
as shown.
$ cat linux.txt | tr [a-z] [A-Z] >output.txt $ cat output.txt LINUX IS MY LIFE LINUX HAS CHANGED MY LIFE LINUX IS BEST AND EVERTHING TO ME..:)
4. In regards to the redirection, you can send input to tr using the input redirection and redirect the output to a file using the same command, as shown.
$ tr [a-z] [A-Z] < linux.txt >output.txt
5. Another useful feature is, you can use the -d
flag to delete characters, for example, to remove the spaces in the domain names using the following command.
$ cat domains.txt www. tecmint. com www. fossmint. com www. linuxsay. com
$ cat domains.txt | tr -d '' www.tecmint.com www.fossmint.com www.linuxsay.com
6. If there are repeated characters in a sequence (for instance double spaces) in the text you are processing, you can use the -s
option to squeeze the characters leaving only one occurrence of it.
$ cat domains.txt www.tecmint.....com www.fossmint.com www.linuxsay.com
$ cat domains.txt | tr -s '' www.tecmint.com www.fossmint.com www.linuxsay.com
7. The -c
option tells tr to use the complement in the given of SET. In this example, we want to delete all the letters and only leave the UID.
$ echo "My UID is $UID" | tr -cd "[:digit:]\n" OR $ echo "My UID is $UID" | tr -d "a-zA-Z"
8. Here is an example of breaking a single line of words (sentence) into multiple lines, where each word appears separately.
$ echo "My UID is $UID" My UID is 1000 $ echo "My UID is $UID" | tr " " "\n" My UID is 1000
9. Related to the previous example, you can also translate multiple lines of words into a single sentence as shown.
$ cat uid.txt My UID is 1000 $ tr "\n" " " < uid.txt My UID is 1000
10. It is also possible to translate just a single character, for instance, a space into a “ : ”
character, as follows.
$ echo "Tecmint.com =>Linux-HowTos,Guides,Tutorials" | tr " " ":" Tecmint.com:=>Linux-HowTos,Guides,Tutorials
There are several sequence characters you can use with tr, for more information, see the tr man page.
$ man tr
That’s all! tr is a useful command for manipulating text on the command line. In this guide, we showed some useful tr command usage examples for Linux newbies. You can share your thoughts with us via the comment form below.
Just to inform there is a typo in the 6th point. Have a look:
$ cat domains.txt | tr -s ” <= Original
$ cat domains.txt | tr -s '.' <= Edited: Notice the "." (dot)
Output:
www.tecmint.com
www.fossmint.com
www.linuxsay.com
Thanks for the great examples. There is a small typo in the first example.
You do
$ cat linux.txt
linux is my life
linux has changed my life
linux is best and everthing to me..:)
and then
$ cat domains.txt | tr [:lower:] [:upper:]
LINUX IS MY LIFE
LINUX HAS CHANGED MY LIFE
LINUX IS BEST AND EVERTHING TO ME..:)
This should be instead.
$ cat linux.txt | tr [:lower:] [:upper:]
@kl,
Thanks, corrected the command in the article…
Hi, How can I remove duplicates of the words from a large text file using the tr command?
I have a string that I assigned to a key combination,
ctrl+k
. The intention is to take the selected (highlighted) text in a textbox in one application, strip out all dots, replace all spaces with underscores, then place the amended text in the clipboard. the line is:When I test the line in a terminal, it works fine. If I try it using
ctrl+k
, it leaves dots in the output string in the clipboard. This is puzzling me.Hi Gurus,
I tried to add a delimiter into fix log to get something like:
From
to this
this my command
But doesn’t work
In the second image of point six, there is wrong command.
The correct command is:
@Franco
Many thanks for the feedback, we will cross-check this.
Trim out control characters in a field.
tr -d '[[:cntrl:]]'
@Stewart
Many thanks for sharing.
You forgot the most important use for tr which is to implement a rot13 encoder-decoder; that is translate between the range a-m and n-z.
@Stef,
Thanks for sharing the tip about tr command, hope it will be useful for all users..
There is a mistake point 6. Should be
-s
not-d
.@Romain,
Thanks for pointing out, yes it is
-s
option, corrected in the article..-s
command is incorrect in your post. You currently have-d
showing in the example. Other than the syntax error and that one example it’s a pretty good introduction to the TR command.@Paul,
We’v corrected the article with right
-s
syntax.No you haven’t. You failed to specify a set;
tr -s ''
doesn’t do anything. To delete the double dots for example, you needtr -s '.'
.You did not show
-s
option example in paragraph 6. Instead you showed the-d ' '
.@Ed,
Yes, we’ve corrected the option in the article.