Bird
Raised Fist0
Linux CLIscripting~20 mins

grep with regex (-E) in Linux CLI - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Regex Grep Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Output of grep -E with alternation
Given a file colors.txt with the following content:
red
blue
green
yellow
purple
orange

What is the output of this command?
grep -E 'red|blue|pink' colors.txt
A
red
blue
pink
purple
B
red
blue
C
red
blue
pink
D
blue
green
Attempts:
2 left
💡 Hint
The -E option allows using extended regex. The pattern matches lines containing 'red' or 'blue' or 'pink'.
💻 Command Output
intermediate
2:00remaining
Using grep -E with character classes and quantifiers
Consider a file words.txt containing:
cat
cot
cut
cit
cet
citizen
cute

What is the output of:
grep -E '^c[aeiou]t$' words.txt
A
citizen
cute
B
cat
cot
cut
cit
cet
citizen
cute
C
cat
cot
cut
cit
cet
D
cat
cot
cut
Attempts:
2 left
💡 Hint
The pattern matches lines starting with 'c', followed by a vowel, then 't', and nothing else.
💻 Command Output
advanced
2:00remaining
Output of grep -E with grouping and quantifiers
Given a file numbers.txt with:
123
1123
11123
111123
1111123

What is the output of:
grep -E '^1{3}23$' numbers.txt
A11123
B
11123
111123
C
123
1123
11123
D
111123
1111123
Attempts:
2 left
💡 Hint
The pattern matches lines starting with exactly three '1's followed by '23' and nothing else.
💻 Command Output
advanced
2:00remaining
grep -E with optional groups and anchors
File animals.txt contains:
cat
cats
dog
dogs
caterpillar
catalog

What is the output of:
grep -E '^cat(s)?$' animals.txt
A
cat
cats
B
cat
cats
caterpillar
catalog
C
cats
caterpillar
Dcat
Attempts:
2 left
💡 Hint
The pattern matches lines starting with 'cat' and optionally ending with 's', and nothing else.
💻 Command Output
expert
3:00remaining
Complex grep -E regex with nested groups and alternation
File log.txt contains:
error123
warning456
info789
error456
warning123
info123

What is the output of:
grep -E '^(error|warning)(123|456)$' log.txt
A
error456
warning456
info123
B
error123
warning456
info123
C
error123
warning123
info789
D
error123
error456
warning123
warning456
Attempts:
2 left
💡 Hint
The pattern matches lines starting with 'error' or 'warning' followed by '123' or '456' exactly.

Practice

(1/5)
1. What does the -E option do when used with the grep command?
easy
A. Ignores case when searching
B. Searches only for exact string matches without regex
C. Prints line numbers along with matching lines
D. Enables extended regular expressions for more complex pattern matching

Solution

  1. Step 1: Understand grep options

    The -E option tells grep to use extended regular expressions, which allow special symbols like |, +, and ().
  2. Step 2: Compare with other options

    Other options like -i ignore case, and -n print line numbers, but -E specifically enables extended regex.
  3. Final Answer:

    Enables extended regular expressions for more complex pattern matching -> Option D
  4. Quick Check:

    grep -E = extended regex [OK]
Hint: Remember: -E means extended regex for flexible patterns [OK]
Common Mistakes:
  • Confusing -E with -i (ignore case)
  • Thinking -E disables regex
  • Mixing -E with line number option -n
2. Which of the following is the correct syntax to search for lines containing either "cat" or "dog" using grep -E?
easy
A. grep -E 'cat|dog' filename
B. grep -E 'cat+dog' filename
C. grep -E 'cat?dog' filename
D. grep -E 'cat.dog' filename

Solution

  1. Step 1: Understand the regex for alternatives

    The symbol | means OR in extended regex, so cat|dog matches lines with either "cat" or "dog".
  2. Step 2: Check other regex symbols

    + means one or more of previous character, ? means zero or one, and . means any single character, so they don't match the OR condition.
  3. Final Answer:

    grep -E 'cat|dog' filename -> Option A
  4. Quick Check:

    Use | for OR in grep -E [OK]
Hint: Use | inside quotes for OR patterns with grep -E [OK]
Common Mistakes:
  • Using + or ? instead of | for OR
  • Not quoting the pattern
  • Confusing . with |
3. Given a file data.txt with these lines:
apple
banana
applepie
pineapple
banana split

What is the output of grep -E '^apple$|banana$' data.txt?
medium
A. applepie banana
B. apple banana split
C. apple banana
D. apple banana banana split

Solution

  1. Step 1: Analyze the regex pattern

    The pattern ^apple$|banana$ means lines exactly matching "apple" OR lines ending with "banana".
  2. Step 2: Match lines in the file

    "apple" matches ^apple$. "banana" matches banana$. "applepie" does not match ^apple$ due to extra characters after "apple". "pineapple" matches neither. "banana split" does not end with "banana".
  3. Final Answer:

    apple banana -> Option C
  4. Quick Check:

    ^apple$ or banana$ matches apple and banana [OK]
Hint: Remember ^ means start, $ means end in regex [OK]
Common Mistakes:
  • Assuming banana split matches banana$
  • Matching applepie because it contains apple
  • Ignoring anchors ^ and $
4. You run grep -E '(foo|bar)+' file.txt but get an error: grep: invalid regular expression. What is the likely cause?
medium
A. You forgot to quote the pattern
B. The parentheses are not escaped and your grep version does not support unescaped ()
C. The + symbol is not valid in extended regex
D. The file.txt does not exist

Solution

  1. Step 1: Check regex syntax and grep version

    Some grep versions require escaping parentheses even with -E, so unescaped () cause invalid regex error.
  2. Step 2: Verify other options

    Quoting is done, + is valid in extended regex, and file existence error would be different.
  3. Final Answer:

    The parentheses are not escaped and your grep version does not support unescaped () -> Option B
  4. Quick Check:

    Escape () if grep -E errors [OK]
Hint: Escape parentheses if grep -E gives regex error [OK]
Common Mistakes:
  • Assuming + is invalid in extended regex
  • Not quoting pattern causing shell errors
  • Confusing file not found with regex error
5. You want to find lines in log.txt that contain a date in format YYYY-MM-DD or YYYY/MM/DD using grep -E. Which pattern correctly matches both formats?
hard
A. grep -E '[0-9]{4}[-/][0-9]{2}[-/][0-9]{2}' log.txt
B. grep -E '[0-9]{4}-|/[0-9]{2}-|/[0-9]{2}' log.txt
C. grep -E '\d{4}[-/]\d{2}[-/]\d{2}' log.txt
D. grep -E '[0-9]{4}[-|/][0-9]{2}[-|/][0-9]{2}' log.txt

Solution

  1. Step 1: Understand character classes and alternation

    Character class [-/] matches either '-' or '/'. Using [0-9] matches digits. Curly braces specify exact counts.
  2. Step 2: Analyze each option

    grep -E '\d{4}[-/]\d{2}[-/]\d{2}' log.txt uses \d which is not supported by grep regex. grep -E '[0-9]{4}-|/[0-9]{2}-|/[0-9]{2}' log.txt uses ungrouped -|/ causing incorrect alternation that splits the pattern. grep -E '[0-9]{4}[-|/][0-9]{2}[-|/][0-9]{2}' log.txt uses [-|/] which includes '|' as a character, incorrect. grep -E '[0-9]{4}[-/][0-9]{2}[-/][0-9]{2}' log.txt correctly uses character classes [-/] without extra characters.
  3. Final Answer:

    grep -E '[0-9]{4}[-/][0-9]{2}[-/][0-9]{2}' log.txt -> Option A
  4. Quick Check:

    Use [0-9]{n} and [-/] for digits and separators [OK]
Hint: Use [0-9] and [-/] for digits and dash or slash [OK]
Common Mistakes:
  • Using \d which grep does not support
  • Including | inside character class incorrectly
  • Using parentheses without escaping in some grep versions
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