Bird
Raised Fist0
Bash Scriptingscripting~10 mins

Character classes ([a-z], [0-9]) in Bash Scripting - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Character classes ([a-z], [0-9])
Start
↓
Input string
↓
Apply regex with character class
↓
Match characters in class?
Yes No↓
Extract/Use
↓
Output matched chars
The script reads a string, applies a regex with character classes to find matching characters, then outputs those matches.
Execution Sample
Bash Scripting
input="abc123XYZ"
matches=$(echo "$input" | grep -o '[a-z]')
echo "$matches"
Extracts and prints all lowercase letters from the input string.
Execution Table
StepInput StringRegex UsedMatch FoundOutput
1abc123XYZ[a-z]aa
2abc123XYZ[a-z]ba b
3abc123XYZ[a-z]ca b c
4abc123XYZ[a-z]No more matchesa b c
💡 No more lowercase letters to match, grep stops.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
input"abc123XYZ""abc123XYZ""abc123XYZ""abc123XYZ""abc123XYZ"
matches""aa\nba\nb\nca\nb\nc
Key Moments - 2 Insights
Why does grep -o '[a-z]' output each letter on a new line?
Because grep -o prints each match separately on its own line, as shown in execution_table rows 1-3.
What happens if the input has uppercase letters when using '[a-z]'?
Uppercase letters do not match '[a-z]', so they are ignored, as seen in the input 'abc123XYZ' where only lowercase letters are output.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output after step 2?
Aa\nc
Ba\nb
Cb\nc
Da\nb\nc
💡 Hint
Check the Output column in execution_table row 2.
At which step does grep stop finding matches?
AStep 4
BStep 3
CStep 2
DStep 1
💡 Hint
Look for 'No more matches' in the Match Found column.
If the regex changes to '[0-9]', what would be the first match found?
Aa
BX
C1
DNo match
💡 Hint
Check the input string and look for digits in variable_tracker.
Concept Snapshot
Character classes in bash regex match sets of characters.
[a-z] matches any lowercase letter.
[0-9] matches any digit.
Used with grep -o to extract matches.
Each match prints on a new line.
Uppercase letters or other chars do not match these classes.
Full Transcript
This example shows how to use character classes like [a-z] in bash scripting with grep. The input string 'abc123XYZ' is processed by grep -o '[a-z]' which finds each lowercase letter separately. Each match is printed on its own line, so the output is 'a', then 'b', then 'c'. Uppercase letters and digits are ignored because they don't match the class. The execution table traces each step of matching and output. The variable tracker shows how the matches variable grows with each found letter. This helps beginners see how character classes work in practice and how grep outputs matches line by line.

Practice

(1/5)
1. What does the character class [a-z] match in bash scripting?
easy
A. All lowercase letters from a to z
B. All uppercase letters from A to Z
C. All digits from 0 to 9
D. All special characters

Solution

  1. Step 1: Understand character class notation

    The notation [a-z] means any character from 'a' to 'z' in lowercase.
  2. Step 2: Identify what [a-z] matches

    This matches all lowercase letters, not uppercase letters, digits, or special characters.
  3. Final Answer:

    All lowercase letters from a to z -> Option A
  4. Quick Check:

    [a-z] = lowercase letters [OK]
Hint: Remember: a-z means lowercase letters only [OK]
Common Mistakes:
  • Confusing lowercase with uppercase letters
  • Thinking it matches digits
  • Assuming it matches special characters
2. Which of the following is the correct syntax to match any digit using a character class in bash?
easy
A. [9-0]
B. [a-z]
C. [A-Z]
D. [0-9]

Solution

  1. Step 1: Identify digit matching syntax

    The character class [0-9] matches any digit from 0 to 9.
  2. Step 2: Check other options

    [a-z] matches lowercase letters, [A-Z] matches uppercase letters, and [9-0] is invalid because ranges must go from lower to higher.
  3. Final Answer:

    [0-9] -> Option D
  4. Quick Check:

    [0-9] = digits [OK]
Hint: Digits always use [0-9], not reversed ranges [OK]
Common Mistakes:
  • Using reversed ranges like [9-0]
  • Confusing letters with digits
  • Using uppercase letter ranges for digits
3. What will be the output of this command?
echo -e "a1 b2 c3" | grep -o '[a-z][0-9]'
medium
A. a1 b2 c3
B. a1 b2 c3
C. a b c
D. 1 2 3

Solution

  1. Step 1: Understand the grep command with -o and pattern

    The pattern [a-z][0-9] matches a lowercase letter followed by a digit. The -o option prints each match on a new line.
  2. Step 2: Apply pattern to input string

    Input "a1 b2 c3" contains matches: "a1", "b2", and "c3". Each will be printed on its own line.
  3. Final Answer:

    a1 b2 c3 -> Option B
  4. Quick Check:

    Pattern matches pairs, -o prints each on new line [OK]
Hint: Use -o to print each match on a separate line [OK]
Common Mistakes:
  • Expecting all matches on one line
  • Matching letters or digits alone
  • Ignoring the -o option effect
4. Identify the error in this grep command:
grep '[a-z-9]' file.txt
medium
A. Should use double brackets [[ ]] instead of single brackets
B. Missing quotes around the pattern
C. The character class is invalid because of the dash placement
D. No error, command is correct

Solution

  1. Step 1: Analyze the character class syntax

    The pattern [a-z-9] is intended to match letters and digits, but the dash is misplaced between 'z' and '9'.
  2. Step 2: Understand dash usage in character classes

    Dash (-) defines a range if placed between two characters. Here, 'z-9' is invalid because 'z' comes after '9' in ASCII order. Dash should be first or last to be literal.
  3. Final Answer:

    The character class is invalid because of the dash placement -> Option C
  4. Quick Check:

    Dash in ranges must go from lower to higher [OK]
Hint: Put dash at start or end to avoid range errors [OK]
Common Mistakes:
  • Placing dash between characters in wrong order
  • Confusing quotes usage
  • Using wrong bracket types
5. You want to extract all words from a file that contain only lowercase letters and digits. Which grep pattern correctly matches such words?
grep -E '\b[?]+\b' file.txt

Choose the correct pattern to replace ?.
hard
A. [a-z0-9]+
B. [a-z]+[0-9]+
C. [a-z][0-9]
D. [0-9a-z]{2,}

Solution

  1. Step 1: Understand the requirement for matching words

    We want words with only lowercase letters and digits, any order, any length (at least one character).
  2. Step 2: Analyze each pattern

    [a-z0-9]+ matches one or more lowercase letters or digits in any order.
    [a-z]+[0-9]+ requires letters followed by digits only.
    [a-z][0-9] matches exactly two characters: one letter then one digit.
    [0-9a-z]{2,} matches two or more letters/digits but order is not enforced; this is valid but less clear than [a-z0-9]+.
  3. Final Answer:

    [a-z0-9]+ -> Option A
  4. Quick Check:

    Character class with + matches any length words [OK]
Hint: Use [a-z0-9]+ to match letters and digits in any order [OK]
Common Mistakes:
  • Forcing letters then digits order
  • Matching only two characters
  • Ignoring word boundaries
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard