The tr command is a powerful utility in Unix-like systems used for translating or deleting characters. This list covers 15 practical examples of tr combined with regex-like character sets, tailored for system administrators, developers, and Linux enthusiasts who want to manipulate text streams efficiently. Each example demonstrates how to use tr with ranges and complement sets to perform common and advanced text transformations.
1. Convert Lowercase Letters to Uppercase
This classic example uses tr to translate all lowercase letters (a-z) to their uppercase counterparts (A-Z). By specifying the character ranges, tr 'a-z' 'A-Z' quickly normalizes text input, which is useful in case-insensitive comparisons or formatting output for readability.
2. Delete All Digits from Input
Using the complement operator with regex-like sets, tr -d '0-9' removes all digits from the input stream. This is valuable when filtering out numbers from logs or cleaning data where numeric characters are not needed.
3. Squeeze Repeated Spaces into a Single Space
The -s flag combined with tr ' ' reduces multiple consecutive spaces to a single space. This helps tidy up text files or command output where extra whitespace can cause formatting issues.
4. Replace All Vowels with a Specific Character
By specifying a set of vowels [aeiouAEIOU] as the source, you can replace them with a single character, such as an asterisk, using tr 'aeiouAEIOU' '*'. This technique is useful for simple censorship or obfuscation tasks.
5. Remove All Non-Alphanumeric Characters
Combining complement sets, tr -cd '[:alnum:]' deletes everything except letters and digits. This method cleans strings for identifiers or filenames, ensuring only safe characters remain.
6. Convert Tabs to Spaces
Replacing tabs with spaces can be done using tr '\t' ' '. This is particularly handy to normalize whitespace in scripts or configuration files where tabs might cause parsing errors.
7. Delete All Newline Characters
Using tr -d '\n' removes all newline characters, effectively concatenating a multi-line input into one continuous line. This is useful when processing data streams that need to be condensed.
8. Replace Multiple Punctuation Marks with a Single Period
Although tr does not support full regex, you can specify a set of punctuation marks, e.g., tr '!?,' '.', to replace each with a period. This simplifies text normalization, especially in preprocessing for natural language tools.
9. Convert Uppercase Hexadecimal Letters to Lowercase
When dealing with hexadecimal strings, tr 'A-F' 'a-f' converts uppercase letters to lowercase, ensuring consistent formatting for hashes or color codes.
10. Remove All Control Characters
Control characters can be removed by deleting characters in the ASCII range 0-31 using tr -d '\000-\037'. This cleans up input files that may have embedded control sequences.
11. Replace All Whitespaces with Newlines
Using tr '[:space:]' '\n', you can split input text into individual words or tokens, each on a new line. This is useful for word counting or further stream processing.
12. Delete All Lowercase Letters
Deleting lowercase letters can be done with tr -d 'a-z', which might be necessary in situations where only uppercase or numeric data is relevant.
13. Squeeze and Replace Multiple Newlines with a Single Newline
tr -s '\n' collapses multiple blank lines into a single blank line, which improves readability and formatting in logs or text files.
14. Replace All Digits with a Hash Symbol
To mask digits in sensitive data, tr '0-9' '#' replaces every digit with a hash, useful for anonymizing numeric information.
15. Complement and Delete All Letters
Using tr -cd '[:alpha:]' deletes everything except letters, but if you want to delete all letters and keep only non-letters, use tr -d '[:alpha:]'. This operation isolates symbols, digits, and whitespace from alphabetic characters.
How to Choose
When selecting tr commands with regex-like patterns, the key considerations are the type of character sets you need to manipulate and whether you want to translate, delete, or squeeze characters. Remember that tr does not support full regex syntax but works with character ranges and POSIX character classes like [:alnum:] or [:space:]. For complex pattern matching, combine tr with other tools like sed or awk. Always test commands on sample inputs to avoid unintended data loss, especially when using the delete or complement options.
Frequently Asked Questions
Q1: Can tr handle full regular expressions?
No, tr only supports character sets, ranges, and POSIX classes, not full regex patterns with quantifiers or groups.
Q2: How do I delete characters using tr?
Use the -d option followed by the characters or ranges to remove, e.g., tr -d '0-9' deletes digits.
Q3: Can tr convert multibyte or Unicode characters?
tr generally works only with single-byte characters and is not Unicode-aware; use iconv or other tools for Unicode transformations.
Q4: What does the -s option do in tr?
The -s (squeeze) option replaces repeated occurrences of a character with a single instance, useful for normalizing whitespace.
Q5: How can I replace tabs with spaces in a file?
Use tr '\t' ' ' to convert each tab character into a space, standardizing indentation.
Q6: Is tr case sensitive?
Yes, character ranges and sets in tr are case sensitive, so a-z differs from A-Z.
Final Thoughts
The tr command is a versatile tool for quick, stream-based character manipulation in Unix-like environments. While it lacks full regex support, its ability to work with character sets and ranges covers a broad spectrum of text processing needs. Understanding these 15 examples empowers users to clean, format, and transform text efficiently in scripts and terminal workflows.
Related
- Flat Lap Grinders for Kids Starting Lapidary: Top 7 Picks & Tips
- Top Lapidary Lap Grinders vs Rotary Grinders for Precision Stonework
- 4 Flat Lap Grinders with Quiet Motors for Noise-Sensitive Work