Understanding Linux / UNIX tr command
Q. Can you explain the tr command and how to use it under Linux / UNIX like oses?
A. The tr utility copies the given input to produced the output with substitution or deletion of selected characters. tr abbreviated as translate or transliterate. It takes as parameters two sets of characters, and replaces occurrences of the characters in the first set with the corresponding elements from the other set i.e. it is used to translate characters.
It is commonly used in shell scripts and other application.
tr command syntax
tr [options] "set1" "set2"
echo something | tr "set1" "set2"
tr "set1" "set2" < input.txt
tr "set1" "set2" < input.txt > output.txt
How do I use tr command under Linux / UNIX?
Translate the word 'linux' to upper-case:
$ echo 'linux' | tr "[:lower:]" "[:upper:]"
$ echo 'linux' | tr "a-z" "A-Z"
$ echo 'I LovE linuX. one is better Than 2' | tr "a-z" "A-Z"
Output:
LINUX I LOVE LINUX. ONE IS BETTER THAN 2
Create a list of the words in /path/to/file, one per line, enter:
$ tr -cs "[:alpha:]" "\n" < /path/to/file
Where,
- -c : Complement the set of characters in string1
- -s : Replace each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character
Shell scripting example
In the following example you will get confirmation before deleting the file. If the user responds in lower case, the tr command will do nothing, but if the user responds in upper case, the character will be changed to lower case. This will ensure that even if user responds with YES, YeS, YEs etc; script should remove file:
#!/bin/bash
echo -n "Enter file name : "
read myfile
echo -n "Are you sure ( yes or no ) ? "
read confirmation
confirmation="$(echo ${confirmation} | tr 'A-Z' 'a-z')"
if [ "$confirmation" == "yes" ]; then
[ -f $myfile ] && /bin/rm $myfile || echo "Error - file $myfile not found"
else
: # do nothing
fi
Remove all non-printable characters from myfile.txt
$ tr -cd "[:print:]" < myfile.txt
Remove all two more successive blank spaces from a copy of the text in a file called input.txt and save output to a new file called output.txt
tr -s ' ' ' ' < input.txt > output.txt
The -d option is used to delete every instance of the string (i.e., sequence of characters) specified in set1. For example, the following would remove every instance of the word nameserver from a copy of the text in a file called /etc/resolv.conf and write the output to a file called ns.ipaddress.txt:
tr -d 'nameserver' < /etc/resolv.conf > ns.ipaddress.txt
Recommended readings:
To check the other options that can be used in the tr command, see the tr command man page, enter:
$ man tr
Subscribe to our free e-mail newsletter or RSS feed to get all updates.
You can Email this page to a friend.
Related Other Helpful FAQs:
- What is the difference between UNIX and MAC OS X?
- How do I start Oracle service in UNIX?
- Run crontab Every 10 Minutes
- Difference between Linux and UNIX
- How To AIX UNIX Configure TCP/IP Networking ( NIC )
Discussion on This FAQ
Leave a Reply
We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!
Tags: linux tr command, linux tr example, shell scripts, tr command, tr command syntax, tr lower case, tr upper case, unix tr command



December 23rd, 2007 at 3:48 pm
Great tips. Typo error -> prodcued
February 13th, 2008 at 3:08 pm
tr -d ‘nameserver’ ns.ipaddress.txt
I think this would delete the word nameserver, but also all occurrences of characters from set {nameserver}, which could probably create big mess.
Proper command should be:
sed ’s/nameserver//g’ ns.ipaddress.txt