Which command reads standard input and writes it out with every lowercase letter converted to uppercase?
LPIC-1 Exam 101-500, objective 103. GNU and Unix commands medium
Draft — not checked yet. This question was written from the published exam objectives and cites the clause it comes from, but nobody has yet read it against that clause and signed for it.
It is kept out of search results and out of mock exams until they have. Read the source below before you take the answer as settled.
The options
Not correct tr -s 'a-z'
Wrong. -s squeezes repeats: a run of the same character from the set is collapsed into one. It changes nothing about case.
Not correct tr -d 'a-z'
Wrong. -d DELETES every character in the set, so all lowercase letters disappear from the output.
Correct tr 'a-z' 'A-Z'
Correct. tr maps each character of the first set to the character at the same position in the second set, so a becomes A, b becomes B, and so on.
Not correct sed 's/a-z/A-Z/'
Wrong. Without a character class this substitutes the literal text "a-z" with "A-Z" once per line. A working sed version would be sed 's/[a-z]/\U&/g' with GNU sed.
Why
tr translates or deletes characters read from standard input; it takes no file arguments, so you always feed it through a pipe or a redirect. The common forms are `tr 'a-z' 'A-Z'` (or the portable `tr '[:lower:]' '[:upper:]'`), `tr -d` to delete a set, and `tr -s` to squeeze repeated characters.
Where this comes from
- Cited
- LPI exam objective 103.2
- What it says
- Use tr to translate, delete and squeeze characters in a text stream.
Practise this
Reading one question is not practice. The trainer will draw a set from objective 103 and space the ones you get wrong.